我目前正在尝试将 J2me 应用程序的http post请求处理到 Websphere 6 服务器,该服务器通过MQ消息传递与其他系统进行通信。队列字符集 Cp037 ,从队列中检索到的消息为 Cp1256 。
一切正常,直到我尝试用阿拉伯语向j2me客户端发送回复:
String respStr = new String(orginalMsg, "Cp1256");
response.getOutputStream().write(bytes);
来自servlet的响应设置为:
我随后在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进行隐式转换,但我得到了相同的结果。
任何指针都会非常感激。
答案 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。