Android: решено: невозможно проанализировать текст данных валюты, полученный из данных UTF-8 - PullRequest
0 голосов
/ 08 октября 2010

Привет, я пытаюсь получить этот ответ xml

<?xml version="1.0" encoding="utf-8"?>
<desc c="¥99"/>

, но на моем Android каждый раз, когда я получаю Â ¥ 99 , после анализа xml вместо правильных данных (т.е. ¥ 99 ). Есть ли способ правильно проанализировать данные Валюты. Пожалуйста, исправьте меня, если я что-то упустил.РЕДАКТИРОВАТЬ: Вот код, который используется для получения XML

docBuilder = docBuilderFactory.newDocumentBuilder ();
    InputSource is = new InputSource ();
    is.setEncoding ("UTF-8");
    Document doc = null;

        is.setCharacterStream (new StringReader (xmlStr));
        doc = docBuilder.parse (is);

    if (doc != null)
    {
            doc.getDocumentElement ().normalize ();
            NodeList detail = doc.getElementsByTagName ("desc");
            String c = detail.item (0).getAttributes ().getNamedItem ("c").getNodeValue ();

    }

Ответы [ 5 ]

0 голосов
/ 08 октября 2010

Привет. Спасибо за вашу поддержку. Я обнаружил проблему, метод, в котором я получал ответ от сервера, имел следующий код:

String strResponse = EntityUtils.toString (response.getEntity ());

, где `response.getEntity () .getContentEncoding () возвратил ноль, поэтому яизменил его на

String strResponse = EntityUtils.toString (response.getEntity (),"UTF-8");

, где "UTF-8" является кодировкой по умолчанию.

Спасибо StackOverFlow!

0 голосов
/ 08 октября 2010

ОК, с примером кода, я бы предположил, что это setCharacterStream(), который запутывает вещи. Не проверяя его самостоятельно, документы говорят, что кодировки используются только байтовыми потоками, поэтому используйте setByteStream() вместо этого, или лучше используйте конструктор потока байтов из InputSource.

0 голосов
/ 08 октября 2010

Было бы полезно, если бы у нас был код, где вы читаете поток XML.Я бы предположил, что вам нужно убедиться, что вы читаете поток в правильной кодировке (поскольку программа чтения потоков может не учитывать кодировку декларации XML.

0 голосов
/ 08 октября 2010

Это не похоже на правильно сформированный XML. Нет имени атрибута, только элемент c. Это кажется достаточной причиной, чтобы не получить правильные результаты ...

0 голосов
/ 08 октября 2010

Ответ зависит от того, как вы анализируете XML. Например, один из перегруженных методов Xml#parse() принимает аргумент Xml.Encoding, который можно использовать, чтобы указать, что источником является UTF-8.

Другие методы синтаксического анализа, вероятно, также имеют возможность установить кодировку. Просто проверьте документы.

Конечно, вполне возможно, что сервер не генерирует правильный UTF-8, даже если он объявлен как таковой в файле XML.

...