gpt4 book ai didi

java - 比较java中的utf-8字符串

转载 作者:搜寻专家 更新时间:2023-10-31 08:30:28 24 4
gpt4 key购买 nike

在我的 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
}

最佳答案

Java 在内部将 String 存储为 char 数组,它们是 16 位无符号值。这是基于支持 64K 字符的早期 Unicode 标准。

您的字符串常量 "Côte d'Ivoire" 就是这种格式。如果您的 XML 文档中的字符编码正确,那么从那里读取的 String 也将采用正确的格式。所以可能的错误是:

  1. XML 文档没有声明字符编码;

  2. 声明的字符编码与实际使用的字符编码不匹配。

也许 XML 字符串被视为 US-ASCII 而不是 UTF-8。我会输出两者并观察它们。如果它们看起来一样,逐个字符比较它们,看看比较失败的地方。您可能还想将常量 String 的 UTF8 编码与 XML 文档中的内容进行比较:

byte[] bytes = "Côte d'Ivoire".getBytes("UTF-8");

当您开始使用“补充字符”时,情况会变得更加复杂。这些字符超出了最初预期的 64K(Unicode 术语中的“代码点”)。参见 Supplementary Characters in the Java Platform .这不是您使用的任何字符的问题,但为了完整性值得注意。

关于java - 比较java中的utf-8字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2792778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com