Unicode

為什麼 xxd 不顯示字節順序標記?

  • April 25, 2017

\ufeff我有一個 Java 類,由於文件開頭,編譯器拒絕編譯該類。我可以通過 來查看 BOM 存在的事實vim -b file.java,但既不顯示xxd也不hexdump顯示這兩個字節。有沒有辦法讓他們這樣做?

U+FEFF 字元以 UTF-8 編碼超過 3 個字節:ef bb bf.

xxdhexdump向您顯示字節內容,所以這 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

引用自:https://unix.stackexchange.com/questions/361174