stringescapeutils unescape en dash с кодом & # 150
Я получаю xml от сторонней системы в формате utf-8, и я пытаюсь правильно проанализировать его и сохранить в моей базе данных. Например, ниже приведены 4 строки xml, которые я получаю, и когда я пытаюсь использовать unescapeXML, он работает для всего, кроме en dash.
String one = "<Name>test ' test</Name>";
String two = "<Fi>Em – S</Fi>";
String three = "<FirstName>a1 ä</FirstName>";
String four = "crapÉ";
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 ответ
Консоль может просто не иметь возможности печатать символы - (–
).
Но когда вы исследуете неэкранированную строку:
String two = "<Fi>Em – S</Fi>";
String twoUnescaped = StringEscapeUtils.unescapeXml(two);
System.out.println(twoUnescaped.codePointAt(7));
вы обнаружите, что ссылка на символ корректно не экранирована к символу Java с кодовой точкой 150.