
\ufeff
파일 시작 부분 으로 인해 컴파일러가 컴파일을 거부하는 Java 클래스가 있습니다 . BOM이 에 의해 존재한다는 사실을 볼 수 있지만 2바이트도 표시 되지 vim -b file.java
않습니다 . 그들이 그렇게 하도록 할 수 있는 방법이 있나요?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