-2
4

2 回答 2

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 甚至完全错过了编码参数。然后超类使用平台编码。

于 2013-05-29T21:14:46.360 回答
1

忘记“字符串编码”的想法,Java 在内部存储字符的方式并不重要,因为您无法修改它。这里的问题是您将它们存储在文件中的方式:使用 String.getBytes("UTF-8") 和 OutputStream 来写入这些字节,您将确保您的文件是 UTF-8。Writer 始终使用 OS 的默认编码,因此您不能使用 FileWriter,例如。您可以在此页面右侧的相关问题中找到更多信息

于 2013-05-29T20:57:31.200 回答