
我有一個 Java 類,編譯器由於\ufeff
位於文件開頭而拒絕編譯。我可以查看 BOM 存在的事實vim -b file.java
,但既不顯示xxd
也不hexdump
顯示這兩個位元組。有什麼辦法讓他們這樣做嗎?
答案1
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