我需要一些帮助来验证字符串是用Java编写的UTF-8。
我正在处理一些Excel工作表并将它们转换为XML文档,当我尝试验证该XML文档时,我得到“1字节UTF-8序列的无效字节1”。我在此验证:http://www.validome.org/xml/validate/。我追溯到那,它引导我到这个:
指示的字符是此撇号’
,它与此撇号'
不同。
我想我要问的是,是否有某种类给出了一个字符串,用UTF-8字符替换所有非UTF-8字符,如下所示:
String magicalFunction(String stringToFix);
答案 0 :(得分: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)。为此它使用给定编码。这个编码参数是可选的(有一个较短的构造函数withut编码),就像在Java API中的许多其他位置一样。然后使用平台的默认编码。这些文件不是跨平台的。
遗憾的是,经常使用的便捷类FileWriter和FileReader甚至完全错过了编码参数。超类然后使用平台编码。
答案 1 :(得分:1)
忘记“字符串编码”的想法,Java在内部存储characteres的方式并不重要,因为你无法修改它。这里的问题是您将它们存储在文件中的方式:使用String.getBytes(“UTF-8”)和OutputStream来写入这些字节,您将确保您的文件是UTF-8。 Writer始终使用OS的默认enconding,因此您不能使用FileWriter。 您可以在本页右侧的相关问题中找到更多信息