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

관련 정보