Из 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, в Хроме всё выглядит похоже.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники