Преобразование кодировки строки Java на веб-странице - PullRequest
3 голосов
/ 03 февраля 2010

У меня есть веб-страница, которая закодирована (через ее заголовок) как WIN-1255.Программа на Java создает текстовую строку, которая автоматически внедряется в страницу.Проблема заключается в том, что исходные строки кодируются в UTF-8, что создает текстовое поле Gibberish на странице.

К сожалению, я не могу изменить кодировку страницы - это требуется системой конфиденциальности клиента.

Есть идеи?

ОБНОВЛЕНИЕ:

Страница, которую я создаю, представляет собой канал RSS, который должен быть установлен в WIN-1255, показывая информацию, полученнуюиз другого канала, который закодирован в UTF-8.

ВТОРОЕ ОБНОВЛЕНИЕ:

Спасибо за все ответы.Мне удалось преобразовать эту строку, и все же, Gibberish.Проблема заключалась в том, что XML-кодировка должна быть установлена ​​в дополнение к кодировке заголовка.

Adam

Ответы [ 5 ]

2 голосов
/ 03 февраля 2010

Кстати, вам нужно установить кодировку модуля записи ответов . Имея только заголовок ответа, вы в основном только указываете клиентскому приложению, какую кодировку использовать для интерпретации / отображения страницы. Это не сработает, если сам ответ написан с другой кодировкой.

Контекст, в котором вы столкнулись с этой проблемой, совершенно неясен (пожалуйста, уточните об этом и в будущих проблемах, подобных этой), поэтому здесь есть несколько решений:

Если это JSP, вам нужно установить следующее в верхней части JSP, чтобы установить кодировку ответа:

<%@ page pageEncoding="WIN-1255" %>

Если это Servlet, вам нужно установить следующее перед любым первым сбросом, чтобы установить кодировку ответа:

response.setCharacterEncoding("WIN-1255");

Между прочим, оба автоматически устанавливают заголовок ответа Content-Type с параметром charset, чтобы дать клиенту команду использовать ту же кодировку для интерпретации / отображения страницы. Также см. эту статью для получения дополнительной информации.

Если это доморощенное приложение, которое использует базовые API java.net и / или java.io, то вам нужно написать символы через OutputStreamWriter, который построен с использованием конструктора, принимающего 2 аргумента где можно указать кодировку:

Writer writer = new OutputStreamWriter(someOutputStream, "WIN-1255");
1 голос
/ 03 февраля 2010

Если у вас есть контроль над оригинальными (правильно представленными) строками, и вам просто нужно вывести их в win-1255:

import java.nio.charset.*;
import java.nio.*;
Charset win1255 = Charset.forName("windows-1255");
ByteBuffer bb = win1255.encode(someString);
byte[] ba = new byte[bb.limit()];

Затем просто напишите содержимое ba в соответствующем месте.

РЕДАКТИРОВАТЬ: То, что вы делаете с ба, зависит от вашей среды. Например, если вы используете сервлеты, вы можете сделать:

ServletOutputStream os = ...
os.write(ba);

Мы также не должны упускать из виду возможный подход: вызвать setContentType("text/html; charset=windows-1255") ( setContentType ), а затем нормально использовать getWriter Вы не совсем поняли, была ли установлена ​​windows-1255 в метатеге или в заголовке ответа HTTP.

Вы уточнили, что у вас есть файл UTF-8, который нужно декодировать. Если вы еще не правильно декодируете строки UTF-8, это не должно иметь большого значения. Просто посмотрите на InputStreamReader (someInputStream, Charset.forName ("utf-8"))

0 голосов
/ 03 февраля 2010
byte[] originalUtf8;//Here input

//utf-8 to java String:
String internal = new String(originalUtf8,Charset.forName("utf-8");
//java string to w1255 String
byte[] win1255 = internal.getBytes(Charset.forName("cp1255"));

//Here output
0 голосов
/ 03 февраля 2010

Страница, которую я создаю, является RSS-фидом, который должен быть установлен в WIN-1255, показывая информацию, взятую из другого фида, закодированного в UTF-8.

В этом случае используйте анализатор для загрузки UTF-8 XML. Это должно правильно декодировать данные в символьные данные UTF-16 (строки Java всегда UTF-16). Ваш механизм вывода должен кодировать от UTF-16 до Windows-1255.

0 голосов
/ 03 февраля 2010

Что встраивает данные в страницу? Либо он должен прочитать его как текст (в UTF-8), а затем снова записать его в кодировке веб-страницы (Win-1255), либо вам следует изменить программу Java для создания файлов (или чего-либо еще) в Win-1255 для запуска с.

Если вы можете дать более подробную информацию о том, как работает система (что генерирует веб-страницу? Как она взаимодействует с Java-программой?), То это прояснит ситуацию.

...