查看Unicode字符串的八进制编码(浏览器内或OSX工具)

jis*_*one 2 xml unicode utf-8 character-encoding

有一个不可见的字符破坏了我的XML解析器.

c&

XML声称是UTF-8,但是当我尝试使用时 <c:import . . . charEncoding="UTF-8">

我得到这个友好的信息:

错误:javax.servlet.jsp.JspException:java.io.CharConversionException:非法的utf8编码(187)

我已经能够找到问题的根源.它是一个位于'c'和'&'之间的隐形字符.

我想更多地了解这个角色,但似乎IntelliJ无法向我展示隐藏的角色...

我想我在网上看到了一个可以将Unicode字符转换为八进制值的工具,但我再也找不到了.如果有一个我需要下载的工具,那就没问题.

有什么建议?


好的,朋友告诉我,od所以我尝试了一下:

$ echo -n "c&" | od -c
0000000    c 357 273 277 357 273 277   &                                
0000010
Run Code Online (Sandbox Code Playgroud)

所以似乎问题是由字节序列引起的 357 273 277

我们知道那个序列是什么吗?

Jon*_*ler 6

在下表中,点表示八进制数字之间的间隔,虚线表示十六进制数字之间的间隔.

Octal:      3    5   7   |  2    7   3  |  2    7   7
Binary:    11.10-1.111   | 10.11-1.011  | 10.11-1.111
Hex:         E     F     |   B     B    |   B     F
Run Code Online (Sandbox Code Playgroud)

这具有有效UTF-8的正确形式.第一个nybble显示两个连续字节,接下来的两个字节确实是连续字节.第一个字节的第二个nybble和接下来两个字节中每个字节的后6位形成Unicode字符的数据.

Unicode Binary:  1111 1110 11.11 1111
Unicode Hex:      F     E    F    F
Run Code Online (Sandbox Code Playgroud)

因此,字符是U + FEFF,它是BOM(字节顺序标记)或ZWNBSP(零宽度非中断空间).以UTF-8编码BOM是常规的(不需要); 连续编码其中两个是双重传统的; 对于BOM而言,它不是UTF-8代码流中的第一个字符,这是三重传统的.

有关详细信息,请参阅BOM上Unicode常见问题解答