
ファイルの先頭に があるためにコンパイラがコンパイルを拒否する Java クラスがあります\ufeff
。 によって BOM が存在するという事実を確認できますvim -b file.java
が、 2 バイトは表示されませxxd
んhexdump
。 表示させる方法はありますか?
答え1
U+FEFF 文字は、3 バイトにわたって UTF-8 でエンコードされます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