Как читать неанглийские тексты в Java? Они представлены в неправильной кодировке - PullRequest
1 голос
/ 14 декабря 2009

Я использую Apache HttpClient. И когда я пытаюсь «прочитать сайт», весь неанглийский контент представлен неправильно.

На самом деле, он представлен в windows-1252, но должен быть в UTF-8. Как я могу это исправить?

Я пытался использовать InputStreamReader (inputStream, Charset.forName ("UTF-8")), но это не помогло (неправильные символы преобразованы в ????????).

Ответы [ 3 ]

2 голосов
/ 14 декабря 2009

Если файл находится в Windows-1252, то указание использовать UTF-8 не будет работать. Дайте ему Windows-1252 в качестве имени кодировки, и тогда вы сможете прочитать правильные данные. Знать, в каком формате данные должны быть, не так полезно, как знать, в каком формате они на самом деле in:)

Вам решать, переписать ли вы его в UTF-8 ...

0 голосов
/ 14 декабря 2009

Если страница имеет кодировку в заголовке «Content-Type», HttpClient выполнит ее. Если нет, то предполагается, что Latin-1, а не Windows-1252. Вы уверены, что получаете Windows-1252? Вы можете проверить кодировку следующим образом:

String encoding = method.getResponseCharSet();

Если вы знаете, что ответ действительно использует UTF-8, но заголовок не указал его, вы можете заставить его читать UTF-8 следующим образом:

byte[] body = method.getResponseBody();
String response = new String(body, "UTF-8");
0 голосов
/ 14 декабря 2009

Поиск правильной кодировки символов может быть немного кошмаром. В зависимости от содержания вашего сайта, может быть полезно следующее. Одна вещь, которую я сделал в прошлом, - это использование класса, который будет использовать несколько методов для определения правильной кодировки символов:

XmlReader из римского проекта будет использовать метку порядка байтов UTF и / или объявления XML для определения правильной кодировки.

Таким образом, вы можете использовать следующую конструкцию:

new BufferedReader(new XmlReader(inputStream))

чтобы добраться до контента.

...