我正在尝试使用Java读取UTF-16 xml文件。
该文件是用C#编写的。

这是Java代码:

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XMLReadTest
{
    public static void main(String[] s)
    {
        try
        {
            File fXmlFile = new File("C:\\my_file.xml");

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

            doc.getDocumentElement().normalize();

            NodeList nList = doc.getElementsByTagName("row");

            for (int temp = 0; temp < nList.getLength(); temp++)
            {
                Node nNode = nList.item(temp);

                if (nNode.getNodeType() == Node.ELEMENT_NODE)
                {
                    Element eElement = (Element) nNode;

                    System.out.println("FILE_NAME: " + eElement.getElementsByTagName("FILE_NAME").item(0).getTextContent());
                }
            }
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
}


这是xml文件:

<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<docMetadata>
  <row>
    <FILE_NAME>Выписка_Винтовые насосы.pdf</FILE_NAME>
    <FILE_CAT>GENERAL</FILE_CAT>
  </row>
</docMetadata>


在eclipse和“运行/调试”设置窗口中运行此代码时,在名为“公用”的最后一个选项卡中,所选编码为“默认-继承(Cp1253)”,我得到的输出错误:

文件名: ???????_???????? ??????。pdf

当同一选项卡中的选择的编码为UTF-8时,输出为OK:

FILE_NAME:Выписка_Винтовыенасосы.pdf

我究竟做错了什么?

如何在Eclipse项目设置中使用默认编码(cp 1253)获得正确的输出?

这段代码运行在我不想更改虚拟机默认编码的服务器上。

我已经使用Java 7和Java 8测试了此代码

最佳答案

该问题与XML本身无关。 Java字符串采用UTF-16编码,并且Document正确将XML数据解码为UTF-16字符串。真正的问题是,您已将Eclipse设置为对其控制台字符集使用cp1253(Windows-1253希腊文,与ISO-8859-7希腊文稍有不同),但是您要输出的大多数Unicode字符(俄语) )根本不存在于该字符集中,因此它们被替换为?。这也解释了为什么将控制台字符集改为UTF-8时输出正确,因为UTF8 UTF16转换是无损失的。

关于java - 读取Java中以UTF16编码的XML文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30918416/

10-12 03:49
查看更多