2 回答
类似逗号的引号不是 ASCII,错误意味着 XML 不能被读取为 UTF-8。那么 XML 文本可能是 Windows Latin-1,也就是 Windows-1252。
检查 XML 文件:
<?xml version="1.0" encoding="Windows-1252"?>
如果encoding
属性存在UTF-8
或缺失(默认为 UTF-8),则文件生成错误。
您可以使用能够切换编码的编辑器检查编码,例如JEdit。
错误生成文件,可能源于纯文本编写。
一个人应该写这样的东西:
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file), "UTF.8"));
OutputStreamWriter 将二进制字节 (OutputStream) 转换为文本 Writer (java String)。为此,它使用给定编码。这个编码参数是可选的(有一个没有编码的更短的构造函数),就像在 Java API 中的许多其他地方一样。然后使用平台的默认编码。这些文件不是跨平台的。
不幸的是,经常使用的便利类 FileWriter 和 FileReader 甚至完全错过了编码参数。然后超类使用平台编码。
忘记“字符串编码”的想法,Java 在内部存储字符的方式并不重要,因为您无法修改它。这里的问题是您将它们存储在文件中的方式:使用 String.getBytes("UTF-8") 和 OutputStream 来写入这些字节,您将确保您的文件是 UTF-8。Writer 始终使用 OS 的默认编码,因此您不能使用 FileWriter,例如。您可以在此页面右侧的相关问题中找到更多信息