java - 未知的 UTF-8 代码单元关闭双引号

标签 java xml utf-8 saxparser

我的问题如下。我正在读取一个 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   
}

关于java - 未知的 UTF-8 代码单元关闭双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14379123/

相关文章:

PHP网站编码问题

java - 有没有办法从 FutureTask 中获取 Callable ?

java - 第一次 Java 循环运行缓慢,为什么? [Sun 热点 1.5,sparc]

java - Java删除字符串中相邻的重复项

android - 单击文本字段后底部的约束布局按钮不可见

css - 使用 CSS 或 XPath 排除另一个元素中包含的元素

java - 替换 Java 中的 ' 和类似标签

php - 将多个 XML 文件(具有相同元素)导入到合并的 MySQL 表中

php mysql 和 unicode

python - 从文件中读取中文文本并将其打印到 shell