迷失在翻译中 - 编码

时间:2011-03-15 12:28:52

标签: java encoding java-me utf-8 websphere

我目前正在尝试将 J2me 应用程序的http post请求处理到 Websphere 6 服务器,该服务器通过MQ消息传递与其他系统进行通信。队列字符集 Cp037 ,从队列中检索到的消息为 Cp1256

一切正常,直到我尝试用阿拉伯语向j2me客户端发送回复:


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

来自servlet的响应设置为:

  • 字符编码: 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 :(得分:0)

从您的评论中,您暗示您正在这样做:

//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())获取字符数据(字符串/字符数组),请设置响应content type并使用writer写入响应数据。

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

编写器将UTF-16编码的字符数据转码为UTF-8。