将数据写入OutputStream时编码问题

时间:2013-08-26 14:52:45

标签: blackberry java-me

我正在开发一款Balckberry移动应用程序。它获取一些数据并使用java.io.OutputStream对象将其发布到javax.microedition.io.Connection上的服务器应用程序。虽然我为Connection设置了“Content-Type”属性,但仍无法在服务器端获取正确的编码字符串

请注意:

  • 服务器可以正常使用任何UTF-8编码的字符串,我已经验证过了 使用Poster
  • XML在写入OutputStream之前在客户端正确编码,因为我可以在调试模式下看到它

任何人都可以找到故障以下是代码。

            // Client side code

            // xml is String xml and is correctly encoded, I can see Arabic or Chinese character it in debug mode
            byte[] requestByte = xml.getBytes();

            // compress request bytes array
            // initialize connection

            // set connection properties
            con.setRequestMethod(HttpConnection.POST);
            con.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0");
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            con.setRequestProperty("Content-Encoding", "UTF-8");

            os = con.openOutputStream();
            InputStream in = new ByteArrayInputStream(requestByte);
            byte[] buffer = new byte[4096];
            int bytesRead = 0;
            while ((bytesRead = in.read(buffer)) > 0) {
                os.write(buffer, 0, bytesRead);
            }

1 个答案:

答案 0 :(得分:2)

一些事情:

1)我假设你称之为xml的变量实际上是一个String。在这种情况下你真正想要的是

byte [] requestByte = xml.getBytes(“UTF-8”);

2)这里似乎有一些冗余代码:

        InputStream in = new ByteArrayInputStream(requestByte);
        byte[] buffer = new byte[4096];
        int bytesRead = 0;
        while ((bytesRead = in.read(buffer)) > 0) {
            os.write(buffer, 0, bytesRead);
        }

为什么不用以下内容替换所有这些:

os.write(requestByte,0,requestByte.length);