Потерянный в переводе - кодировка - PullRequest
1 голос
/ 15 марта 2011

В настоящее время я пытаюсь обработать http-запрос из приложения J2me на сервер Websphere 6 , который связывается с другими системами посредством обмена сообщениями MQ.Набор символов очереди - Cp037 , а сообщение, полученное из очереди, - Cp1256 .

Все отлично работает до того момента, когда я пытаюсь отправить ответ на арабском языке.клиенту j2me следующим образом:


String respStr = new String(orginalMsg, "Cp1256");
response.getOutputStream().write(bytes);

Ответ от сервлета задается с помощью:

  • Кодировка символов: UTF-8
  • Тип содержимого: text / plain; charset = UTF-8

Впоследствии я прочитал ответ в J2me с:


inputStreamReader = new InputStreamReader(connFact.getInputConnection(),"UTF-8");  
buffer = new StringBuffer((int) length); // If no length, default to 256 buffer
char[] data = new char[128];
int total = 0x00;
int read = -1;
do
{
    read = inputStreamReader.read(data);
    if (read > 0x00)
    {
        total += read;
        buffer.append(data, 0x00, read);
    }
} while (read != -1 && !cancel);

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

Однако когда дело доходит до отображения результата только из ответа?отображаются символы.

Я пытался выполнить преобразование программно, а не позволять Websphere выполнять неявное преобразование, но я получаю тот же результат.


Любые указатели будут высоко оценены.

1 Ответ

0 голосов
/ 15 марта 2011

Из вашего комментария вы подразумеваете, что делаете это:

//these bytes are Cp037 encoded
bytes = txtMsg.getText().getBytes("Cp037");
//you don't seem to be using respStr
String respStr = new String(orginalMsg, "Cp1256");
//you've told this response it is UTF-8, but the bytes are Cp037
response.getOutputStream().write(bytes);

Если вы получаете символьные данные (массив строк / символов) из очереди (txtMsg.getText()), задайте ответ тип содержимого и используйте Writer для записи данных ответа.

response.setContentType("text/plain;charset=UTF-8");
response.getWriter(txtMsg.getText());

Устройство записи перекодирует UTF-16-кодированные символьные данные в UTF-8.

...