在我的java程序中,我正在从xml中检索一些数据.这个xml只有很少的国际字符,用utf8编码.现在我使用xml解析器读取这个xml.一旦我从xml解析器中检索特定的国际字符串,我需要将它与预定义的字符串集进行比较.问题是当我在国际字符串比较中使用string.equals失败时.
如何在java中将字符串与国际字符串进行比较?我正在使用SAXParser和XMLReader从xml读取字符串.
这是比较字符串的行
String country;
country = getXMLNodeString();
if(country.equals("Côte d'Ivoire"))
{
}
getXMLNodeString()
{
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
/* Get the XMLReader of the SAXParser we created. */
XMLReader xr = sp.getXMLReader();
/* Create a new ContentHandler and apply it to the XML-Reader*/
XmlParser xmlParser = new XmlParser(); //my class to parse xml
xr.setContentHandler(xmlParser);
/* Parse the xml-data from our URL. */
xr.parse(new InputSource(url.openStream()));
/* Parsing has finished. */
//return string here
}
Run Code Online (Sandbox Code Playgroud)
Java将Strings内部存储为s的数组char,这是16位无符号值.这是基于支持64K字符的早期Unicode标准.
您的String常量"Côte d'Ivoire"采用此格式.如果您的XML文档上的字符编码是正确的,那么String从那里读取的格式也将正确.所以可能的错误是:
XML文档没有声明字符编码;
声明的字符编码与使用的实际字符编码不匹配.
也许XML字符串被视为US-ASCII而不是UTF-8.我会输出两个并注视它们.如果它们看起来相同,则逐个字符地比较它们以查看比较失败的位置.您可能还希望将常量的UTF8编码String与XML文档中的内容进行比较:
byte[] bytes = "Côte d'Ivoire".getBytes("UTF-8");
Run Code Online (Sandbox Code Playgroud)
当你开始进入"补充字符"时,它会变得更加复杂.这些是超出最初预期64K的字符(Unicode术语中的"代码点").请参阅Java平台中的补充字符.这不是您正在使用的任何角色的问题,但值得注意的是完整性.
由于您正在与字符串文字进行比较,因此您需要确保以与javac预期相同的编码保存源文件。-encoding您还可以使用 的参数指定源文件的编码方式javac。
这似乎是这种情况下最有可能的“陷阱”。
请注意,我谈论的是 Java 源代码的编码,而不是 XML 文档。
| 归档时间: |
|
| 查看次数: |
18526 次 |
| 最近记录: |