Unicode
為什麼 xxd 不顯示字節順序標記?
\ufeff
我有一個 Java 類,由於文件開頭,編譯器拒絕編譯該類。我可以通過 來查看 BOM 存在的事實vim -b file.java
,但既不顯示xxd
也不hexdump
顯示這兩個字節。有沒有辦法讓他們這樣做?
U+FEFF 字元以 UTF-8 編碼超過 3 個字節:
ef bb bf
.
xxd
或hexdump
向您顯示字節內容,所以這 3 個字節,而不是那些 3 個字節編碼的字元vim -b
。要刪除該 BOM(在 UTF-8 中沒有意義)並修復 Microsoft 文本文件的其他特性(這可能是您問題的根源),您可以使用
dos2unix
.$ printf '\ufefffoobar\r\n' | hd 00000000 ef bb bf 66 6f 6f 62 61 72 0d 0a |...foobar..| 0000000b $ printf '\ufefffoobar\r\n' | uconv -x name \N{ZERO WIDTH NO-BREAK SPACE}\N{LATIN SMALL LETTER F}\N{LATIN SMALL LETTER O}\N{LATIN SMALL LETTER O}\N{LATIN SMALL LETTER B}\N{LATIN SMALL LETTER A}\N{LATIN SMALL LETTER R}\N{<control-000D>}\N{<control-000A>} $ printf '\ufefffoobar\r\n' | uconv -x hex \uFEFF\u0066\u006F\u006F\u0062\u0061\u0072\u000D\u000A $ printf '\ufefffoobar\r\n' | dos2unix | hd 00000000 66 6f 6f 62 61 72 0a |foobar.| 00000007