【问题标题】:How to avoid parsing strange characters如何避免解析奇怪的字符
【发布时间】:2016-04-24 16:11:10
【问题描述】:

在处理 XML 文件时,Stax 解析器遇到以下行:

<node id="281224530" lat="48.8975614" lon="8.7055191" version="8" timestamp="2015-06-07T22:47:39Z" changeset="31801740" uid="272351" user="Krte�?ek">

正如你所见,行尾有一个奇怪的字符,当解析器到达该行时,程序停止并给我以下错误:

Exception in thread "main" javax.xml.stream.XMLStreamException: ParseError  
at [row,col]:[338019,145]

Message: Ungültiges Byte 2 von 2-Byte-UTF-8-Sequenz.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown 
Source)
at com.example.Main.main(Main.java:46)

我应该在 Eclipse 的设置中更改什么以避免该错误吗?

更新

代码:

XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader parser = null;
        try {
            parser = factory.createXMLStreamReader(in);
        } catch (XMLStreamException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.d(TAG, "newParser",
                    "e/createXMLStreamReader: " + e.getMessage());
        }

【问题讨论】:

    标签: java xml sax stax


    【解决方案1】:

    如果您在 eclipse 中编辑并保存了您的 XML 文件,如果您的 eclipse 未配置为使用 UTF-8,这可能会出现问题。检查这个问题:How to support UTF-8 encoding in Eclipse

    否则你可能不需要对你的代码做任何事情。你只需要一个正确的UTF-8-encoded 内容。

    【讨论】:

      【解决方案2】:

      使用UTF8 格式读取XML。

      File file = new File("c:\\your-file.xml");
      InputStream inputStream= new FileInputStream(file);
      Reader reader = new InputStreamReader(inputStream,StandardCharsets.UTF_8);
      

      从评论中查看文件的编码:来自reateXMLEventReader(InputStream stream, String encoding)

      parser = factory.createXMLStreamReader(in, StandardCharsets.UTF_8); //if its utf-8
      

      【讨论】:

      • 看起来他已经在读取utf-8编码的文件,但出现的符号不在此编码中
      • 我正在使用 StAX 库。并读取 xml 文件我使用这一行: parser = factory.createXMLStreamReader(in);我不能使用,StandardCharsets.UTF_8 作为第二个参数..请看看更新部分
      • 查看你的xml文件的编码superuser.com/questions/638456/…
      • @user2121 increateXMStreamReader(in) 中是什么类型?
      • 那么来自@Andremoniy 的回答一针见血!
      【解决方案3】:

      这不是关于eclipse,而是关于文件的编码。有两种情况:

      1) 文件已损坏,即它包含不正确的符号,而不是来自定义的编码

      2) 文件不在utf-8 编码中,它在xml 标头中定义。因此,您应该检查您是否正在正确读取文件内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 2020-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多