xxdにバイトオーダーマークが表示されないのはなぜですか?

xxdにバイトオーダーマークが表示されないのはなぜですか?

\ufeffファイルの先頭にあるため、コンパイラがコンパイルを拒否するJavaクラスがあります。 BOMが存在することを確認できますが、vim -b file.javaバイトコードもバイトも2バイトをxxd表示しません。hexdumpこの2バイトを表示する方法はありますか?

答え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

関連情報