2011-01-09 2 views
1

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

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

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(); 

Когда я посылаю содержимое «ул» утешать это выглядит примерно так:

alt text

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

alt text

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

+1

это ошибка перекодирования; используйте синтаксический анализатор XML или определите кодировку перед декодированием в строку: http://www.w3.org/TR/REC-xml/#sec-guessing Я предполагаю, что вам нужна строка - если вы просто хотите сохранить файл локально, чтение и запись байтов. – McDowell

+0

@McDowell Я закончил чтение и запись байтов непосредственно в файл. Использование String было ограничено самостоятельно. Благодаря! – Penang

ответ

2

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

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

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

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

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

+0

, обеспечивающий InputStreamReader с помощью «UTF-8», помог мне на правильном пути. Благодаря! – Penang

1

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

+0

Я буду помнить об этом предположении, но в настоящее время моя задача - сохранить файл локально. Благодаря! – Penang

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