stringescapeutils unescape en dash с кодом & # 150

Я получаю xml от сторонней системы в формате utf-8, и я пытаюсь правильно проанализировать его и сохранить в моей базе данных. Например, ниже приведены 4 строки xml, которые я получаю, и когда я пытаюсь использовать unescapeXML, он работает для всего, кроме en dash.

String  one  = "<Name>test &apos; test</Name>";
String  two  = "<Fi>Em &#150; S</Fi>";
String three = "<FirstName>a1 &#228;</FirstName>";
String four = "crap&#201;";

System.out.println(StringEscapeUtils.unescapeXml(one));
System.out.println(StringEscapeUtils.unescapeXml(two));
System.out.println(StringEscapeUtils.unescapeXml(three));
System.out.println(StringEscapeUtils.unescapeXml(four));

Выход:

<Name>test ' test</Name>

<Fi>Em  S</Fi>

<FirstName>a1 ä</FirstName>

crapÉ

Все выглядит отлично, кроме строки "два", на самом деле это должно быть "Em - S".

Я пытаюсь выяснить, что я делаю неправильно, и как лучше всего декодировать такие строки XML

1 ответ

Консоль может просто не иметь возможности печатать символы - (&#150;).

Но когда вы исследуете неэкранированную строку:

String two = "<Fi>Em &#150; S</Fi>";
String twoUnescaped = StringEscapeUtils.unescapeXml(two);
System.out.println(twoUnescaped.codePointAt(7));

вы обнаружите, что ссылка на символ корректно не экранирована к символу Java с кодовой точкой 150.

Другие вопросы по тегам