【问题标题】:Problem with processing "specific" characters in text (in Java, using XML parser)处理文本中“特定”字符的问题(在 Java 中,使用 XML 解析器)
【发布时间】:2009-05-16 10:54:38
【问题描述】:

在使用 Java 中的 DOM API 处理文本中的“特定”字符时遇到问题。文件为 XML 格式。我在上一篇文章中被告知 XML 中的 & 符号是什么情况(以及其他几个字符,例如 )。这是帖子: Special characters in XML files - processing with the DOM API

但是,我可以如何处理数据中的其他特殊字符,例如德语和法语中的特定字母?例如,我在 XML 文档的文本元素中有单词“façade”。但是,字母“ç”的位置看起来已损坏:当我在 linux 中使用 vim 编辑器打开文件时,它看起来像:“fa^Zade”,当我使用另一个编辑器将其作为 .txt 或 .xml 文件打开时, “ç”的位置看起来像一个小的空矩形(或空白空间)。德语变音符号和其他语言的其他“特殊”符号也是如此。当我尝试使用 XML 解析器处理文件时,它们会出现问题(我遇到解析错误)。我想这是一些编码问题。在 XML 文件的标题中,我使用的是 encoding="UTF-8"。我试图改变它(即“Unicode”或其他),但它没有帮助。

我怎样才能让这些特殊字符被识别?我应该使用一些特殊的编码吗? 如果它们只是两个或三个字符,我肯定知道,我可以在使用 Java 中的 DOM API 处理之前替换它们,就像我使用与符号 (&) 符号所做的那样(我已将 & 转换为 &) ,但是,它们很多,并且可能是任何“特殊”符号。 问题是否来自数据的保存方式?例如,在保存过程中应该使用特殊编码 (?),以便现在可以识别字符 (?)。 (我自己没有保存数据)。
谢谢。

【问题讨论】:

    标签: xml encoding


    【解决方案1】:

    如果它们只是两个或三个字符,我肯定知道,我可以在使用 Java 中的 DOM API 进行处理之前替换它们,就像我使用与号 (&) 符号所做的那样(我已将 & 转换为 & ),但是,它们很多,并且可能是任何“特殊”符号。

    您无需预测所有可能的输入。相反,只需将每个此类实体转换为 NCR 或数字字符引用。例如,€ 是欧元符号 € 的 NCR;这意味着20AC 是欧元符号的十六进制 Unicode 引用。

    【讨论】:

    • 谢谢,我可以为符号这样做,我知道它们是什么:即,如果我认识到在这个地方使用了德国或法国字母或欧元符号。然而,我正在处理的文本是由不同的人(来自不同的国家)写的,即使他们用英语写,他们也经常包含他们语言的一些词。或者只是一些由非英语字符组成的国际词汇。从这个意义上说,我可以期待一切,我想看看是否有某种方法可以普遍识别这些字符。
    • 嗯——我想你可能误解了我的意思,因为我认为这种方法符合你的描述。将您的输入视为字符流。您所要做的就是检查每个字符并确定它是否“特殊”。例如,一种方法是将十六进制值大于 0xFF 的每个 Unicode 字符视为特殊字符,并将其编码为 NCR。
    【解决方案2】:

    这似乎不是 XML 的问题,而是编码问题。 XML 可以处理 UTF-8 和 Latin-1。但是您需要知道输入编码,或者不使用阅读器,而是使用带有 XML 声明的输入流,使用正确的编码属性。

    您确定源没有损坏吗?它是哪种编码?第一行声明的 XML 编码属性对吗? ^Z 看起来不像 UTF-8 编码!

    【讨论】:

      【解决方案3】:

      encoding="UTF-8" 似乎是正确的方法,那么您不必区别对待这些字符中的任何一个。你说'在 XML 文件的标题中我使用的是 encoding="UTF-8"',但你是否也将字符数据写为 UTF-8?

      在vim中你可以使用“ga”来显示光标下字符的代码,这应该有助于调试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-28
        • 2012-03-23
        • 1970-01-01
        • 2013-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多