我在Orbeon Forms中更改了一个文件,下次加载页面时,收到一条错误消息,指出 3字节UTF-8序列的无效字节2 。我该如何解决这个问题?
答案 0 :(得分:13)
当Orbeon Forms读取XML文件并期望它使用UTF-8编码时会发生这种情况,但不知何故该文件未以UTF-8正确编码。要解决此问题,请确保:
您在文件开头有一个XML声明,说文件是UTF-8:
<?xml version="1.0" encoding="UTF-8" ?>
您的编辑器支持XML,因此它可以解析XML声明,从而使用UTF-8编码。如果您的编辑器不了解XML,并且您不想使用其他编辑器,请查找允许您指定编辑器必须使用UTF-8的选项或首选项。
答案 1 :(得分:5)
三字节UTF-8序列如下所示:
1110xxxx 10xxxxxx 10xxxxxx
您的错误消息可能意味着三个字节的第一个字节错误地标记了三个字节序列的开头,或者第二个字节格式错误。
正如@avernet所说,你需要确保系统中的所有元素都在生成并期望UTF-8。
答案 2 :(得分:4)
启动程序时,请使用以下Java命令行参数:
-Dfile.encoding=UTF-8
例如,
java -Dfile.encoding=UTF-8 -jar foo.jar
答案 3 :(得分:2)
我在Eclipse中遇到了同样的问题,我只是尝试通过更改文件类型。
右键点击文件 - &gt;资源 - &gt;文本文件编码(UTF-8)
这个解决方案对我有用。
感谢。
答案 4 :(得分:0)
我正在使用Eclipse,我还必须更改文本文件编码:
- &gt; Windows-&gt;偏好设置 - &gt;工作区
然后它运作良好。
由于
答案 5 :(得分:0)
您可能需要使用以下参数配置Tomcat:
-Dfile.encoding = UTF-8
答案 6 :(得分:0)
有同样的问题。
问题&gt;我正在获取X509证书值(多个编码源)以生成PDF报告。 PDF是通过等待UTF-8 xml请求的Web服务生成的,我将在编组之前对值进行重新编码。
解决方案&gt; http://fabioangelini.wordpress.com/2011/08/04/converting-java-string-fromto-utf-8/
使用此课程:
public class StringHelper {
// convert from UTF-8 -> internal Java String format
public static String convertFromUTF8(String s) {
String out = null;
try {
out = new String(s.getBytes("ISO-8859-1"), "UTF-8");
} catch (java.io.UnsupportedEncodingException e) {
return null;
}
return out;
}
// convert from internal Java String format -> UTF-8
public static String convertToUTF8(String s) {
String out = null;
try {
out = new String(s.getBytes("UTF-8"), "ISO-8859-1");
} catch (java.io.UnsupportedEncodingException e) {
return null;
}
return out;
}
}
用法:
//getSummaryAttMap() returns a HashMap
String value = (String) getSummaryAttMap().get(key);
if(value != null)
value = StringHelper.convertToUTF8(value);
else
value = "";
答案 7 :(得分:0)
我会提供一个特殊的编码答案。当您检查xml文件时没有任何问题,并且您正在使用Java并运行Tomcat Server。您的源代码可能忽略了自己指定编码,因此当在xml内容中读取时,JVM使用默认编码作为字符串或其他重复字符串的内容,后者又引用Tomcat的默认编码。如果xml和Tomcat的编码不一致,它也可能报告相同的错误消息。
答案 8 :(得分:0)
切换输入编码可能会有所帮助:
XMLEventReader eventReader =
inputFactory.createXMLEventReader(in,
"utf-8"
//"windows-1251"
);