Encoding 信息是什么;3字节UTF-8序列的无效字节2“;什么意思?

Encoding 信息是什么;3字节UTF-8序列的无效字节2“;什么意思?,encoding,utf-8,orbeon,Encoding,Utf 8,Orbeon,我在Orbeon表单中更改了一个文件,下一次加载页面时,我收到一条错误消息,说3字节UTF-8序列的字节2无效。如何解决这个问题?当Orbeon Forms读取XML文件并希望它使用UTF-8编码时,会发生这种情况,但不知何故,该文件没有正确地用UTF-8编码。要解决此问题,请确保: 在文件的开头有一个XML声明,说明文件是UTF-8格式的: <?xml version="1.0" encoding="UTF-8" ?> 您的编辑器支持XML,因此它可以解析XML声明,并因此使

我在Orbeon表单中更改了一个文件,下一次加载页面时,我收到一条错误消息,说3字节UTF-8序列的字节2无效。如何解决这个问题?

当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,我还必须在以下位置更改文本文件编码:

    ->窗口->首选项->工作区

    然后它工作得很好


    谢谢

    三字节UTF-8序列看起来像:

    1110xxxx 10xxxxxx 10xxxxxx
    
    错误消息可能意味着三个字节中的第一个字节错误地标记了三字节序列的开始,或者第二个字节的格式不正确


    正如@avernet所说,您需要确保系统中的所有元素都在生成并期望UTF-8。

    您可能需要使用以下参数配置Tomcat:

    -Dfile.encoding=UTF-8有同样的问题

    问题>我正在获取X509证书值(多编码源)以生成PDF报告。 PDF是通过等待UTF-8XML请求的Web服务生成的,我必须在编组之前重新编码这些值

    解决方案>

    使用此类:

    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"
                                );
    

    如果有人对关于java和编码(以及这类错误)的更一般的讨论感兴趣,您可以阅读