【问题标题】:Saxparser not parsing HTML numeric character reference. question mark displayedSaxparser 不解析 HTML 数字字符引用。显示的问号
【发布时间】:2012-05-24 16:07:33
【问题描述】:

我正在尝试解析包含 - 和 ’ 数字字符引用的 xml。在解析它给我输出为“?”。不仅是这两个,xml 中的任何 HTML/XML 数字字符引用都会产生此问题。 saxparser 只接受预定义的实体

我使用默认处理程序 saxparser。 system out in character 方法向我显示数字字符引用的问号。

我做了很多谷歌搜索,在任何地方我都看到数字字符引用的使用不应该造成任何问题。

有什么帮助吗?

【问题讨论】:

    标签: java xml-parsing saxparser


    【解决方案1】:

    System.out in character method 向我显示数字字符引用的问号。

    这听起来像是您的输出/控制台的字符编码问题。 以下适用于 JSE 7

    public static void main(String[] args) 抛出异常{ SAXParser 解析器 = SAXParserFactory.newInstance().newSAXParser();

        XMLReader reader = parser.getXMLReader();
        reader.setContentHandler(new ContentHandler() {
    
            // other methods omitted 
    
            @Override
            public void characters(char[] ch, int start, int length)
                    throws SAXException {
                System.out.println(new String(ch, start, length));
    
            }
        });
    
        FileReader fReader = new FileReader("/tmp/HelloWorld.xml");
        reader.parse(new InputSource(fReader));
        fReader.close();
    }
    

    使用 XML 文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <Test>
    Hello World&#8217;
    </Test>
    

    输出:Hello World'

    您是否尝试过使用调试器查看传入的字符数组?

    【讨论】:

    • char[] ch 有两个值。一个是?另一个是^@
    • 看起来还是编码问题。字符数组的“真实”值是什么?您可以使用 for (int idx = 0; idx &lt; length; ++idx) System.out.println(String.format("%h %c",ch[start + idx],ch[start+idx])); 之类的方式打印字符的十六进制值
    • 我的系统输出语句 System.out.println("ch====="+String.format("%h %c",ch[start + i],ch[start+i] ));输出:ch=====2014 ? ch=====0 ^@
    • 8212 = 0x2014 是一个“—”; 8217 = 0x2019 是一个“'”; 0 是不可打印的字符,通常标记字符串的结尾。 0 和 ^@ 的表示看起来很奇怪。你能发布你的代码和你的 XML 文件吗?
    • 相同的代码在我的本地工作区而不是在我们的 linux 批处理服务器中工作正常
    猜你喜欢
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多