Я пытаюсь разобрать xml, содержащий иностранные буквы (особенно,), однако у меня возникают проблемы с успешным их синтаксическим анализом. Я не получаю никаких ошибок, но буквы анализируются как это; Вместо æ im get Ã| вместо å im get à ¥, а вместо ø im получения ø Я также заметил, что символ - отображается неправильно. Я понимаю, что я мог бы сделать. ReplaceAll для 3 букв, но я не уверен, что проблема здесь сводится к тому, что я где-то ошибаюсь, или если это просто невозможно, не спускаясь по пути replaceAll.XML-синтаксический анализ с dom и специальными символами
Код:
private Document getDomElement(String xml) {
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource(new ByteArrayInputStream(
xml.getBytes()));
// is.setCharacterStream(new StringReader(xml));
is.setEncoding("UTF-8");
Log.i(TAG, "Encoding: " + is.getEncoding());
doc = db.parse(is);
} catch (ParserConfigurationException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (SAXException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (IOException e) {
Log.e("Error: ", e.getMessage());
return null;
}
// return DOM
return doc;
}
private String getValue(Element item, String str) {
NodeList n = item.getElementsByTagName(str);
return this.getElementValue(n.item(0));
}
private final String getElementValue(Node elem) {
Node child;
if (elem != null) {
if (elem.hasChildNodes()) {
for (child = elem.getFirstChild(); child != null; child = child
.getNextSibling()) {
if (child.getNodeType() == Node.TEXT_NODE) {
return child.getNodeValue();
}
}
}
}
return "";
}
}
Позвольте мне знать, если вам нужно, чтобы увидеть больше кода, чем это.
Оцените любые предложения - Спасибо.
Спасибо за ваши предложения. Следуя вашим предложениям, я пробовал следующее: InputSource is = new InputeSource (новый ByteArrayInpuStream (xml.getBytes («UTF-8»))); и InputSource = новый InputSource (новый StringReader (xml)); Ни один из этих подходов не имел никакого значения. The is.setCharacterStream - это попытка решить эту проблему, но, похоже, она не имеет никакого значения. – Line
@Line - Возможно, кодировка была испорчена, когда сначала была создана xml String (до вызова 'getDomElement'). Возможно, убедитесь, что на входной строке действительно есть символы, которые вы ожидаете. –
Пример xml, который я пытаюсь проанализировать, находится здесь: HttpResponse loginResponse = loginClient.execute (loginPost); HttpEntity responseEnt = loginResponse.getEntity(); Строковый результат = EntityUtils.toString (responseEnt); // Это строка, переданная синтаксическому анализатору. Может ли проблема EnitityUtils.toString() вызывать проблемы? Я, однако, могу использовать xml, который я разбираю, чтобы проверить, что другая информация обрабатывается на телефоне с API веб-сайта. – Line