【问题标题】:How can i convert a string to a Document (DOM) with charset in ISO-8859-1如何使用 ISO-8859-1 中的字符集将字符串转换为文档 (DOM)
【发布时间】:2012-06-22 18:18:57
【问题描述】:

我正在将 Web 服务中接收到的字符串转换为文档 (DOM) xml,如下所示:

Document file= null;
String xmlFile= "blablabla"; //latin1 encodeing

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
this.file = builder.parse(new InputSource(new StringReader(xmlFile)));

但是该字符串是用 ISO-8859-1 (latin1) 编码的,当我阅读本文档的一个节点时,我遇到了一些错误。如何使用 ISO-8859-1 编码正确创建 DOM 对象?或者如何读取字符串中编码为 Latin 1 的节点???

【问题讨论】:

  • xml的编码参数是什么?
  • Java 字符串始终为 UTF-16;真正的问题变成了“如何将 ISO-8859-1 数据读取到字符串中?” 说明您从中读取字符数据的数据源。
  • 对了,字符串本身的数据是否正确?
  • 我想是这样,但是信息是从控制台应用程序(使用 c#)发送到 Web 服务(使用 java)的协议就像这样 nameOfTheMethod(String xmlFile, int type)

标签: java string dom character-encoding iso-8859-1


【解决方案1】:

前言

字符串没有编码,因为它们代表一个字符序列(它们是在 unicode 标准中定义的抽象实体)。

字节序列有一个编码,可以被解释为一个字符序列(前提是你告诉java如何解释它)。

您的问题

在您的问题中,您的数据存储在字符串中。因此它已经被解释为一个字符序列。显然解释不正确。

根据您的问题和您了解数据编码的方式,有 2 个选项:

解决方案 1(可能是最好的):

不要解释您收到的数据并将其保存为字节序列(Stream 或 byte[] 或 ByteArray)。然后将此字节序列直接传递给您的 DOM 解析器(只要标记正确,它将正确解码 xml 文件,无论其编码如何。

解决方案 2(可能是唯一可行的方法,具体取决于您获取数据的方式):

如@ThOrndike 的回答中所述,将字符串重新编码为 ByteArray:

this.file = builder.parse(new ByteArrayInputStream(xmlFile.getBytes("ISO-8859-1")));

这只有在您确定字符串一开始就被正确解释的情况下才有效。

显然,这里不是这种情况,似乎为您提供字符串的库已经将其解释为 UTF-8 字节序列(用“?”替换所有错误字节,这是 UTF 的行为-8 位读者)。在这种情况下,您将无法执行任何操作,因为原始字节已丢失。

您唯一的希望是解决方案 1,或者找到一种方法来强制为您提供 String 的库正确解释它。

【讨论】:

    【解决方案2】:

    试试这个:

    this.file = builder.parse(new ByteArrayInputStream(xmlFile.getBytes("ISO-8859-1")));
    

    【讨论】:

    • 如果我在读取带有 ó 字符的字符串时使用此初始化,例如:GOL TELEVISIÓN --> GOL TELEVISI?N
    • 看来这件事的关键是@McDowell 所说的。如果 java 字符串始终为 UTF-16,则使用 getBytes("UTF-16")。如果内容来自文件,您可以使用“ISO-8859-1”参数。尝试使用 UTF-16 看看会发生什么,否则问题会转发到数据源。
    • 我已经检查了 UTF-16 并且无法正常工作……我还重新审查了数据源,没关系。还有其他想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2020-01-25
    • 2011-01-18
    • 2012-01-05
    • 2014-08-29
    相关资源
    最近更新 更多