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
我们知道那个序列是什么吗?
在下表中,点表示八进制数字之间的间隔,虚线表示十六进制数字之间的间隔.
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常见问题解答
| 归档时间: |
|
| 查看次数: |
1609 次 |
| 最近记录: |