在Java中将字符串验证为UTF-8

时间:2013-05-29 20:02:45

标签: java utf-8

我需要一些帮助来验证字符串是用Java编写的UTF-8。

我正在处理一些Excel工作表并将它们转换为XML文档,当我尝试验证该XML文档时,我得到“1字节UTF-8序列的无效字节1”。我在此验证:http://www.validome.org/xml/validate/。我追溯到那,它引导我到这个: 指示的字符是此撇号,它与此撇号'不同。

我想我要问的是,是否有某种类给出了一个字符串,用UTF-8字符替换所有非UTF-8字符,如下所示:
String magicalFunction(String stringToFix);

2 个答案:

答案 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。 您可以在本页右侧的相关问题中找到更多信息