在我的应用程序中有阿拉伯语和英语语言支持,但是当手机接收到阿拉伯语短信时我遇到了一个问题,它显示为 ??? ??? (问号)知道我用于测试的 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();
我的应用程序中的英文工作文件短信。
最佳答案
首先,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 header (可能是“Content-type: application/x-www-form-urlencoded; charset=UTF-8
”?)。如果您自己无法理解,请向我们指出文档。
编辑:找到文档:http://www.google.se/search?q=valuefirst+pace
它非常清楚地表明您需要对 XML 文档进行 url 编码,所以这可能就是您所缺少的,在这种情况下,OutputStreamWriter
的编码只要它与 ASCII 兼容,就没有关系。
但是,文档没有指定使用哪种字符编码进行 url 编码,这是非常薄弱的。不过 UTF-8 是最有可能的。
关于java - 用java在手机上发送阿拉伯语短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4184429/