Отбрасывать непечатаемые символы, возвращаемые в ответе XML сервера - PullRequest
1 голос
/ 09 января 2011

При попытке использовать Bing API для поиска я получаю символы, которые нельзя распечатать и, похоже, не содержат никакой дополнительной информации.Цель состоит в том, чтобы сохранить ответ XML (UTF-8) в виде текстового файла для последующего анализа.

Мой код в настоящее время выглядит примерно так:

    URL url = new URL(queryURL);

    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    BufferedWriter out = new BufferedWriter(new FileWriter(query+"-"+saveResultAs));
    String str = in.readLine();
    out.write(str);

    in.close();
    out.close();

Когда я отправляю содержимое'str' для консоли это выглядит примерно так:

alt text

и вот как выглядит вновь созданный локальный XML-файл:

alt text

Что мне нужно сделать, чтобы преобразовать текст UTF-8, чтобы в str не было лишних символов?

Ответы [ 2 ]

2 голосов
/ 09 января 2011

Если вы заранее знаете кодировку, вы должны

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

И то же самое с писателем ... в вашем примере после записи ваш файл закодирован в платформе по умолчанию, все еще объявляя UTF-8.

Может быть целесообразно прочитать кодировку из декларации XML, чтобы избежать неожиданностей.

Если вы хотите сохранить данные только для последующего использования, в любом случае нет смысла кодировать / декодировать.Просто прочитайте байты и запишите их.Сохранить задачу определения кодировки для синтаксического анализатора XML.

1 голос
/ 09 января 2011

Синтаксический анализатор XML будет обрабатывать кодирование / декодирование, и соответствующие символы будут возвращены вам (например, синтаксический анализатор SAX сделает это с помощью обратного вызова метода characters()). Все, что вам нужно сделать, это сохранить его в подходящем файле (возможно, с подходящей Byte-Order-Mark ?)

...