在我的应用程序中有阿拉伯语和英语语言支持,但我遇到一个问题,当移动接收阿拉伯语短信它被取代为??? ???? (问号)知道我用于测试的monbile支持阿拉伯语和应用程序中的所有阿拉伯语工作正常问题只有在我的手机收到阿拉伯语短信时才会出现。
String ff = new String(smsContent.getBytes("UTF-8"), "UTF-8");
StringWriter stringBuffer = new StringWriter();
PrintWriter pOut = new PrintWriter(stringBuffer);
pOut.print("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
pOut.print("<!DOCTYPE MESSAGE SYSTEM \"http://127.0.0.1/psms/dtd/messagev12.dtd\" >");
pOut.print("<MESSAGE VER=\"1.2\"><USER USERNAME=\""+userName+"\" PASSWORD=\""+password+"\"/>");
pOut.print("<SMS UDH=\"0\" CODING=\"1\" TEXT=\""+ff+"\" PROPERTY=\"0\" ID=\"2\">");
pOut.print("<ADDRESS FROM=\""+fromNo+"\" TO=\""+toNO+"\" SEQ=\"1\" TAG=\"\" />");
pOut.print("</SMS>");
pOut.print("</MESSAGE>");
pOut.flush();
pOut.close();
URL url = new URL("url");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setDoOutput(true);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
out.write("data="+message+"&action=send");
out.flush();
我的申请表中的英文工作文件中的短信。
答案 0 :(得分:2)
首先,new String(smsContent.getBytes("UTF-8"), "UTF-8")
是一个冗余的往返,相当于smsContent
。首先,您通过UTF-8将字符串编码为字节,然后立即再次从字节中将其解码回来。
其次,你将XML混淆在一起的方法完全被打破了。你不能只是连接字符串,并希望最终得到格式良好的XML。例如,想想如果有人试图发送"
会发生什么?使用XML库。
第三,您隐式使用OutputStreamWriter
的平台默认编码而不是显式指定一个,这意味着您的代码仅适用于那些随机碰巧具有正确编码的机器。我猜你的没有。
第四,你的POST参数困惑的方法被打破了。您尚未指定变量message
是什么。我猜它是完整的XML文档,但是你试图将它作为POST参数发送到某种HTTP服务,在这种情况下它需要进行转义/ url编码。例如,如果有人试图发送消息&data=<whatever>&
会发生什么?请澄清。
另见Using java.net.URLConnection to fire and handle HTTP requests
第五,既然你要发送一些HTTP服务,那么可能有一些该服务的文档要发送什么样的编码或如何指定它,可能还有一个HTTP头(可能是“Content-type: application/x-www-form-urlencoded; charset=UTF-8
”?)。如果您自己无法弄明白,请将我们指向文档。
修改:找到文档:http://www.google.se/search?q=valuefirst+pace
它非常清楚地表明你需要对XML文档进行url编码,这可能是你所缺少的,在这种情况下,只要它与ASCII兼容,OutputStreamWriter
的编码就无关紧要了。
但是,文档没有指定用于url-encoding的字符编码,这非常弱。尽管如此,UTF-8是最有可能的。
答案 1 :(得分:1)
从我在某些网页上看到的内容,阿拉伯语(以及其他语言)中的短信用UCS-2而不是UTF-8编码。更改编码值得一试。
答案 2 :(得分:1)
您正在使用平台的默认编码来处理请求数据,这可能与UTF-8有很大不同。尝试在OutputStreamWriter中指定UTF-8:
... new OutputStreamWriter(connection.getOutputStream(), "UTF-8")
...
另一个问题当然是,只要您的任何参数包含必须以XML格式转义的字符,您手工制作的XML文档就会失败,但这是一个不同的故事。为什么不使用XML库呢?
附加信息:Christoffer指出的文档还解释了您使用的请求示例仅适用于标准SMS字符集中包含字符的文本消息。对于Unicode字符支持,您必须使用不同的请求。