为什么xxd不显示字节顺序标记?

为什么xxd不显示字节顺序标记?

我有一个 Java 类,由于\ufeff位于文件开头,编译器拒绝编译。我可以通过 查看 BOM 存在的事实vim -b file.java,但 和 均不xxd显示hexdump这两个字节。有什么方法可以让它们显示这两个字节吗?

答案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

相关内容