2013-03-18 17 views
0
<?xml version="1.0" encoding="UTF-8"?> 

Я приведу только некоторые примеры из кодов, которые я считаю значимыми.кодировка символов от XML до Java

Я читаю некоторую информацию из одного XML с помощью запроса HTTP, что-то вроде этого:

 // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     xml = EntityUtils.toString(httpEntity); 

если я Печатает строку XML на экране я могу увидеть некоторые проблемы с уже

кодификацией

затем вернуть документ у меня есть этот

 Document doc = null; 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

     DocumentBuilder db = dbf.newDocumentBuilder(); 

     InputSource is = new InputSource(); 
     is.setCharacterStream(new StringReader(xml)); 

     doc = db.parse(is); 

Хотя я правильно извлечение информации из часов ttp, у меня возникают проблемы с идентификацией символов, когда я показываю данные.

Я уже пытался сделать is.setEncoding ("UTF-8") но не работал.

ответ

4

Проблема в том, что вы преобразовали xml в строку (символы), не делайте этого (вы, скорее всего, использовали неправильную кодировку и исказили xml). рассматривать xml как двоичные данные (байты).

Вы можете использовать EntityUtils.toByteArray (okay), или вы можете передать поток HttpEntity непосредственно в XML-парсер (идеальный).

+0

Спасибо за ответ, не возможно, что проблема связана с XML, а не с кодом? И вместо того, чтобы делать EntityUtils.toString, я могу использовать то, что вы предложили, но тогда, что я должен добавить в конструктор этого объекта? is.setCharacterStream (новый StringReader (xml)); // раньше, когда это было со строкой is.setCharacterStream (???); // Я не знаю, какой конструктор я могу использовать с массивом байтов. – unpix

+1

@unpix Используйте конструктор 'InputSource (InputStream)' (http://docs.oracle.com/javase/7/docs/api/org/xml/sax/InputSource.html#InputSource%28java.io.InputStream % 29). Если вы начинаете с байтового массива, вы можете использовать [ByteArrayInputStream] (http://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayInputStream.html#ByteArrayInputStream%28byte []% 29). – McDowell

+0

Спасибо, может быть, это сработает, но я уже нашел самое простое решение – unpix

Смежные вопросы