Сравнение utf-8 представляет в виде строки в Java

В моей программе Java я получаю некоторые данные из xml. Этот xml имеет немного международных символов и кодируется в utf8. Теперь я считал этот xml, использующий xml синтаксический анализатор. После того как я получаю конкретную международную строку из xml синтаксического анализатора, я должен сравнить его с набором предопределенных строк. Проблема состоит в том, когда я использую string.equals на internatinal сбоях сравнения строк.

Как сравнить строки с международными строками в 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
  }
5
задан cppdev 8 May 2010 в 03:44
поделиться

3 ответа

Поскольку вы сравниваете строковый литерал, вам необходимо убедиться, что вы сохраняете исходный файл в той же кодировке, что и javac ожидает. Вы также можете указать, в какой кодировке находятся ваши исходные файлы, с помощью аргумента -encoding для javac .

Это похоже на наиболее вероятную ошибку в данном сценарии.

Обратите внимание, что я говорю о кодировке исходного кода Java, а не XML-документа.

3
ответ дан 13 December 2019 в 19:23
поделиться

Java хранит String внутри как массив из char s, которые представляют собой 16-битные значения без знака. Это было основано на более раннем стандарте Unicode, который поддерживал 64 КБ символов.

Ваша строковая константа «Кот-д'Ивуар» имеет этот формат. Если ваша кодировка символов в вашем XML-документе правильная, тогда Строка , прочитанная оттуда, также будет в правильном формате. Итак, возможные ошибки:

  1. XML-документ не объявляет кодировку символов;

  2. Объявленная кодировка символов не соответствует фактической используемой кодировке символов.

Возможно, строка XML обрабатывается как US-ASCII вместо UTF-8. Я выводил и то и другое и смотрел на них. Если они выглядят одинаково, сравните их посимвольно, чтобы увидеть, где сравнение не удается. Вы также можете сравнить кодировку UTF8 вашей константы String с тем, что находится в XML-документе:

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

Это становится более сложным, когда вы начинаете вводить «дополнительные символы». Это символы, превышающие изначально запланированные 64 КБ («кодовые точки» на языке Unicode). См. Дополнительные символы в платформе Java . Это не проблема ни с одним из персонажей, которые вы используете, но это стоит отметить для полноты картины.

6
ответ дан 13 December 2019 в 19:23
поделиться

Строки Java являются всегда UTF-16. Ваш XML-синтаксический анализатор должен преобразовывать символы UTF-8 файла в UTF-16 во время чтения, а ваши собственные строки уже находятся в UTF-16 в памяти, поэтому вы можете сравнить их с обычным вызовом equals () . Если они не сравнивают равных, когда вы думаете, что им следовало бы, проблема, скорее всего, в другом.

2
ответ дан 13 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: