Из java-сервлета посылаю на сторонний web-сервер GET запрос, получаю в ответ html код, запихиваю этот код в строку. Смотрю в строку -а русские буквы в ней в виде ромбиков с вопросиками. В самом html документе кодировка нигде не указана. Поэтому вручную перекодировываю строку в UTF-8. Не помогло.
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String url = "http://meteonovosti.ru/index.php?index=8&value=26063";
URL obj = new URL(url);
HttpURLConnection connection = (HttpURLConnection) obj.openConnection();
connection.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
String answer = response.toString();
System.out.println("Оригинальный ответ: "+answer);
answer = new String(answer.getBytes(), "UTF-8" );
System.out.println("После перекодирования: "+answer);
Оба вывода одинаковы (пропущены куски html кода):
Оригинальный ответ: �����-��������� : ����� ������
После перекодирования: �����-��������� : ����� ������
В настройках Эклипса везде указано использовать UTF-8. Что мне нужно сделать, чтобы получить русские буквы?
Просто текст приходит не в UTF-8. Вы создаете строку из байтового массива, байтовый массив ничего не знает о кодировке, это просто набор байт, чтобы сделать из него строку, нужно указать кодировку
answer = new String(answer.getBytes(), "UTF-8");
Вы указали UTF-8, но исходный текст перед преобразованием в байтовый массив был представлен в другой кодировке. В какой?
Я прошел по вашей ссылке http://meteonovosti.ru/index.php?index=8&value=26063
, открыл в браузере консоль разработчика, там во вкладке Network можно увидеть различные http-заголовки, один из них был
Content-Type: text/html; charset=koi8-r
Значит ваш русский текст был представлен в кодировке koi8-r, следовательно строку вам нужно инициализировать так:
answer = new String(answer.getBytes(), "KOI8-R");
UPD.
Извиняюсь, поспешил, нужно указать кодировку для InputStream
, а не для создаваемой строки.
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "KOI8-R"));
UPDUPD.
Картинка, как это выглядит в браузере. Обычно нужно нажать F12, у вас откроется похожее полуокно, затем в адресной строке переходите на нужную вам страницу и на вкладке Network будут все http-запросы, обычно основной запрос находится вверху. Мой скришнот из Firefox, в Хроме всё выглядит похоже.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Задача состоит в том, чтобы найти и напечатать подстроку наибольшей длины из одинаковых символовВыдает ошибку, не могу понять, почему происходит...
Как передать переменную из Phonegap 7 JS в Android Java? Я читал на SO анлгоязычные решения, но многие они либо старые, либо просто не подходят в моём случае