Warum zeigt xxd die Byte-Order-Markierung nicht an?

Warum zeigt xxd die Byte-Order-Markierung nicht an?

Ich habe eine Java-Klasse, deren Kompilierung der Compiler aufgrund von \ufeffam Anfang der Datei verweigert. Ich kann zwar sehen, dass die BOM vorhanden ist vim -b file.java, aber weder xxdnoch hexdumpwerden die zwei Bytes angezeigt. Gibt es eine Möglichkeit, sie dazu zu bringen?

Antwort1

Das Zeichen U+FEFF ist in UTF-8 über 3 Bytes kodiert: ef bb bf.

xxdoder hexdumpzeigt Ihnen den Byte-Inhalt, also diese 3 Bytes, und nicht die Zeichen, die diese 3 Bytes kodieren, wie vim -bes der Fall ist.

Um diese BOM zu entfernen (die in UTF-8 keinen Sinn ergibt) und andere Eigenheiten von Microsoft-Textdateien zu beheben (die wahrscheinlich die Ursache Ihres Problems sind), können Sie verwenden 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

verwandte Informationen