Por que o xxd não mostra a marca de ordem de byte?

2

Eu tenho uma classe Java que o compilador se recusa a compilar devido a \ufeff no início do arquivo. Eu posso ver o fato de que a BOM está presente por vim -b file.java , mas nem xxd nem hexdump mostram os dois bytes. Existe alguma maneira de fazê-lo?

    
por oarfish 25.04.2017 / 13:56

1 resposta

3

O caractere U + FEFF é codificado em UTF-8 em 3 bytes: ef bb bf .

xxd ou hexdump mostra o conteúdo do byte, então esses 3 bytes, não o caractere que esses 3 bytes codificam como vim -b .

Para remover essa BOM (que não faz sentido em UTF-8) e corrigir outras idiossincrasias dos arquivos de texto da Microsoft (que provavelmente é a fonte do seu problema), você pode 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
    
por 25.04.2017 / 14:01