【问题标题】:Why my DOM parser cant read UTF-8为什么我的 DOM 解析器无法读取 UTF-8
【发布时间】:2013-05-06 13:46:36
【问题描述】:

当 XML 文件中有 UTF-8 字符时,我的 DOM 解析器无法加载文件 现在,我知道我必须指导他阅读 utf-8,但我不知道如何将其放入我的代码中 在这里:

File xmlFile = new File(fileName);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();

我知道有 setencoding() 方法,但我不知道将它放在我的代码中的什么位置...

【问题讨论】:

  • XML 文件是否以<?xml ... encoding="UTF-8"?> 开头?
  • @Matt Ball,这是问题。我以错误的方式写入文件,所以我不能把它放在 XML 中。相反,我想用java写它

标签: java parsing dom


【解决方案1】:

试试这个。为我工作

        InputStream inputStream= new FileInputStream(completeFileName);
        Reader reader = new InputStreamReader(inputStream,"UTF-8");
        InputSource is = new InputSource(reader);
        is.setEncoding("UTF-8");

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(is);

【讨论】:

  • 很高兴听到您发现它有帮助... :)
【解决方案2】:

尝试使用 Reader 并提供编码作为参数:

InputStream inputStream = new FileInputStream(fileName);
documentBuilder.parse(new InputSource(new InputStreamReader(inputStream, "UTF-8")));

【讨论】:

  • 输入源在 DOM API 中?
  • 不工作或者我不知道如何使用它。无法从静态上下文 sax 引用非静态方法解析
【解决方案3】:

我使用了 Eugene 在那里所做的并稍作改动。

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

FileInputStream in = new FileInputStream(new File("XML.xml"));
Document doc = dBuilder.parse(in, "UTF-8");

虽然这将被读取为UTF-8,如果您在 Eclipse 控制台中打印它不会显示任何“UTF-8”字符,除非 java 文件保存为“UTF-8”,或者至少发生了什么和我一起

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 2020-01-20
  • 1970-01-01
  • 2017-03-25
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多