【发布时间】:2012-07-04 10:15:59
【问题描述】:
我在 Orbeon Forms 中更改了一个文件,下次加载该页面时,我收到一条错误消息,提示 Invalid byte 2 of a 3-byte UTF-8 sequence。我该如何解决这个问题?
【问题讨论】:
我在 Orbeon Forms 中更改了一个文件,下次加载该页面时,我收到一条错误消息,提示 Invalid byte 2 of a 3-byte UTF-8 sequence。我该如何解决这个问题?
【问题讨论】:
当 Orbeon Forms 读取一个 XML 文件并希望它使用 UTF-8 编码,但不知何故该文件没有以 UTF-8 正确编码时,就会发生这种情况。要解决此问题,请确保:
您在文件开头有一个 XML 声明,说明该文件是 UTF-8:
<?xml version="1.0" encoding="UTF-8" ?>
您的编辑器支持 XML,因此它可以解析 XML 声明并因此使用 UTF-8 编码。如果您的编辑器不支持 XML,并且您不想使用其他编辑器,请查找允许您指定编辑器必须使用 UTF-8 的选项或首选项。
【讨论】:
我正在使用 Eclipse,我还必须更改文本文件编码:
->Windows->首选项->工作区
然后它工作正常。
谢谢
【讨论】:
一个三字节的 UTF-8 序列如下所示:
1110xxxx 10xxxxxx 10xxxxxx
您的错误消息可能意味着这三个字节中的第一个字节错误地标记了一个三字节序列的开始,或者第二个字节格式错误。
正如@avernet 所说,您需要确保系统中的所有元素都生成并期待 UTF-8。
【讨论】:
您可能需要使用以下参数配置 Tomcat:
-Dfile.encoding=UTF-8
【讨论】:
有同样的问题。
问题 > 我正在获取 X509 证书值(多个编码源)以生成 PDF 报告。 PDF 是通过等待 UTF-8 xml 请求的网络服务生成的,我必须在编组之前重新编码这些值。
解决方案 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 = "";
【讨论】:
启动程序时,请使用以下 Java 命令行参数:
-Dfile.encoding=UTF-8
例如,
java -Dfile.encoding=UTF-8 -jar foo.jar
【讨论】:
我在 Eclipse 中遇到了同样的问题,我只是尝试更改文件类型。
右键文件->资源->文本文件编码(UTF-8)
这个解决方案对我有用。
谢谢。
【讨论】:
我将提供一个特殊的编码答案。当您检查 xml 文件并且没有任何问题时,您正在使用 Java 并运行 Tomcat 服务器。您的源代码可能会忽略自己指定编码,因此 JVM 在将 xml 内容作为字符串或其他表示字符串的内容读取时使用默认编码,这反过来又引用了 Tomcat 的默认编码。如果xml和Tomcat的编码不一致,也可能报同样的错误信息。
【讨论】:
输入的编码切换可能会有所帮助:
XMLEventReader eventReader =
inputFactory.createXMLEventReader(in,
"utf-8"
//"windows-1251"
);
【讨论】: