¿Por qué xxd no muestra la marca de orden de bytes?

¿Por qué xxd no muestra la marca de orden de bytes?

Tengo una clase Java que el compilador se niega a compilar debido \ufeffal inicio del archivo. Puedo ver el hecho de que la lista de materiales está presente en vim -b file.java, pero ni xxdmuestra hexdumplos dos bytes. ¿Hay alguna manera de hacer que lo hagan?

Respuesta1

El carácter U+FEFF está codificado en UTF-8 en 3 bytes: ef bb bf.

xxdo hexdumple muestra el contenido del byte, por lo que esos 3 bytes, no el carácter que codifican esos 3 bytes vim -b.

Para eliminar esa lista de materiales (que no tiene sentido en UTF-8) y corregir otras idiosincrasias de los archivos de texto de Microsoft (que probablemente sea la fuente de su problema), puede usar 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

información relacionada