我的问题如下。我正在读取一个 XML 文件,其文本节点部分包含 UTF-8 版本的打开和关闭双引号。文本被提取、缩短为 3999 字节并放入新的 XML 格式,然后保存为文件。
虽然 Notepad++ 在输入文件中正确显示了这两个符号,但输出文件包含无效的 utf-8 字符,甚至 Notepad++ 也无法显示。
左双引号打印正确,但右双引号被破坏。
使用十六进制编辑器,我发现代码单元以某种方式从
E2 80 9D
在输入文件中
E2 80 3F
在输出文件中。
我正在使用 sax-parser 进行 xml 解析。
是否有任何已知的错误可能导致这种行为?
不是已知错误,而是读取文件或写入文件时忽略编码的常见错误 - 导致使用的平台默认编码在本例中为 Windows-1252。
当您最初读取文件时,应指定 UTF-8 解码,而在写入新文件时,应指定 UTF-8 编码。如果您发布您的实现,我可以就地纠正它。
如何重现这一点:
byte[] quoteutf8 = {(byte)0xE2, (byte)0x80, (byte)0x9D};
String decodedPlatformDefault = new String(quoteutf8, "Windows-1252");
byte[] encodedPlatformDefault = decodedPlatformDefault.getBytes("Windows-1252");
for( byte i : encodedPlatformDefault ) {
System.out.print(String.format( "%02x ", i ));
//e2 80 3f
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)