“处理问题”;具体的;文本中的字符(在Java中,使用XML解析器)

“处理问题”;具体的;文本中的字符(在Java中,使用XML解析器),xml,encoding,Xml,Encoding,我在Java中使用DOM API处理文本中的“特定”字符时遇到问题。这些文件是XML格式的。在上一篇文章中,我被告知XML中的符号(&)是什么情况(还有一些字符,如)。以下是帖子: 但是,我可以如何处理数据中的其他特殊字符,例如德语和法语中的特定字母?例如,我在XML文档的文本元素中有“façade”一词。然而,字母“ç”的位置看起来已经损坏:当我在linux中用vim编辑器打开文件时,它看起来像“fa^Zade”,当我用另一个编辑器以.txt或.xml文件的形式打开它时,“ç”的位置看起来像

我在Java中使用DOM API处理文本中的“特定”字符时遇到问题。这些文件是XML格式的。在上一篇文章中,我被告知XML中的符号(&)是什么情况(还有一些字符,如<和>)。以下是帖子:

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

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

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


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

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

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

encoding=“UTF-8”似乎是正确的选择,那么您不应该以不同的方式对待这些字符。您说过“在XML文件的头中,我正在使用encoding=“UTF-8”,但您是否也将字符数据作为UTF-8写入


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

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