在手机上发送阿拉伯短信在java中

问题描述:

在我的应用程序中有阿拉伯语和英语两种语言的支持,但是当手机接收到阿拉伯短信时,我面临一个问题,它被替换为??? ???? (问号)知道我用于测试的monbile支持阿拉伯语和应用程序中的所有阿拉伯语正常工作正常,问题是只有当我的手机收到阿拉伯短信时。在手机上发送阿拉伯短信在java中

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

你怎么发短信,代码可以帮助我们 – 2010-11-15 12:47:39

+0

如果发送UTF数据服务器尝试打印存在,以确保它在UTF8真正达到有还,尝试调试像这样 – 2010-11-15 12:58:31

首先,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

它相当清楚地指出,你需要URL编码XML文档,所以这是你缺少大概是什么,在这种情况下,为OutputStreamWriter的编码都不会有问题只要它是ASCII兼容的。

然而,文档没有指定要用于URL编码,这是非常弱的字符编码。 UTF-8是最有可能的。

+0

感谢您的指导,我研究了你的链接,并得到了答案 – chetan 2010-11-18 07:32:14

从我在某些网页上看到的短信阿拉伯语(和其他人)编码与UCS-2而不是UTF-8。改变编码值得一试。

+0

Unicode的短信确实是UCS-2 – ptomli 2010-11-15 13:14:58

+0

它会抛出一个异常 - java.io.UnsupportedEncodingException – chetan 2010-11-15 13:26:37

+0

@chetan - 尝试UTF-16,它相当于第一个65535倍的值。 – 2010-11-15 13:49:10

您正在使用您的平台的默认编码请求数据,这可能与UTF-8很不相同。尝试在使用OutputStreamWriter指定UTF-8:

... new OutputStreamWriter(connection.getOutputStream(), "UTF-8") ...

另一个问题当然是你的手工制作的XML文档会尽快您的任何参数包含字符,其中有失败的以XML格式转义,但这是一个不同的故事。为什么不使用XML库呢?


只是一个额外的信息:文档克里斯托弗指向也说明您正在使用要求的例子是只适合在手机短信的标准字符集短信。对于Unicode字符支持,您必须使用不同的请求。

+0

我已经通过将UTF-8,在这里你指定 – chetan 2010-11-15 13:29:20

+0

测试,但我面临同样的问题 – chetan 2010-11-15 13:29:37

+0

感谢您的指导,我研究了API持有人的文件,并得到了答案 – chetan 2010-11-18 07:31:36