Próbuję przeanalizować plik XML zawierający obce litery (szczególnie æøå), jednak mam problemy z ich pomyślnym przeanalizowaniem. Nie otrzymuję żadnych błędów, ale litery są analizowane w ten sposób; Zamiast æ otrzymuję æ, zamiast å otrzymuję Ã¥ i zamiast ø otrzymuję ø Zauważyłem również, że znak - nie wyświetla się prawidłowo. Zdaję sobie sprawę, że mógłbym zrobić .replaceAll dla 3 liter, ale nie jestem pewien, czy problem polega na tym, że popełniłem gdzieś błąd, czy po prostu nie jest to możliwe bez podążania drogą zastąpienia wszystkiego.
Kod:
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 "";
}
}
Daj mi znać, jeśli chcesz zobaczyć więcej kodu niż ten.
Doceń wszelkie sugestie - dzięki.
2 odpowiedzi
Problem polega na tym, że konwertujesz argument String na bajty za pomocą getBytes()
. Lepiej w ogóle nie konwertować na bajty:
InputSource is = new InputSource(new StringReader(xml));
Widzę, że skomentowałeś to w kodzie. Czy jest jakiś powód, dla którego nie chcesz go używać?
Jeśli musisz użyć tablicy bajtów, najlepiej zrobić to w ten sposób:
InputSource is = new InputSource(new ByteArrayInputStream(
xml.getBytes("UTF-8")));
W starszych wersjach Androida domyślny zestaw znaków zależał od ustawień regionalnych.
Zakładasz, że domyślne kodowanie platform to „UTF-8”; Myślę, że w rzeczywistości może to być „UTF-16”.
Spróbuj przekazać tę samą nazwę kodowania do xml.getBytes(), jak do is.setEncoding().
Podobne pytania
Nowe pytania
android
Android to mobilny system operacyjny Google, używany do programowania lub tworzenia urządzeń cyfrowych (smartfony, tablety, samochody, telewizory, Wear, Glass, IoT). W przypadku tematów związanych z Androidem użyj tagów specyficznych dla Androida, takich jak android-intent, android-activity, android-adapter itp. W przypadku pytań innych niż programowanie lub programowanie, ale związanych ze strukturą Androida, użyj tego linku: https: // android.stackexchange.com.