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

用java在手机上发送阿拉伯语短信,java,java-me,sms,Java,Java Me,Sms,在我的应用程序中,有阿拉伯语和英语两种语言支持,但当手机接收到阿拉伯语短信时,我面临一个问题,它显示为????(问号)知道我用于测试的monbile支持阿拉伯语,并且应用程序中的所有阿拉伯语都工作正常,只有当我的手机收到阿拉伯语短信时,才会出现问题 String ff = new String(smsContent.getBytes("UTF-8"), "UTF-8"); StringWriter stringBuffer = new StringWriter();

在我的应用程序中,有阿拉伯语和英语两种语言支持,但当手机接收到阿拉伯语短信时,我面临一个问题,它显示为????(问号)知道我用于测试的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();
String ff=新字符串(smsContent.getBytes(“UTF-8”),“UTF-8”);
StringWriter stringBuffer=新StringWriter();
PrintWriter pOut=新的PrintWriter(stringBuffer);
撅嘴。打印(“”);
撅嘴。打印(“”);
撅嘴。打印(“”);
撅嘴。打印(“”);
撅嘴。打印(“”);
撅嘴。打印(“”);
撅嘴。打印(“”);
撅嘴,脸红;
闭上嘴;
URL=新URL(“URL”);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoOutput(真);
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(connection.getOutputStream());
out.write(“data=“+message+”&action=send”);
out.flush();

我的应用程序中的英文短信工作文件。

根据我在一些互联网页面上看到的内容,阿拉伯语(以及其他语言)的短信是用UTF-8编码的,而不是UTF-8。更改编码值得一试。

根据我在一些互联网页面上看到的内容,阿拉伯语(以及其他语言)的短信是用UTF-8编码的,而不是UTF-8。更改编码值得一试。

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

<代码>新建OutputStreamWriter(connection.getOutputStream(),“UTF-8”)

当然,另一个问题是,当您的任何参数包含必须在XML中转义的字符时,手工制作的XML文档就会失败,但情况不同。为什么不改用XML库呢



只是一个附加信息:Christoffer指向的文档还解释了您使用的请求示例仅适用于具有标准SMS字符集中字符的文本消息。对于Unicode字符支持,您必须使用不同的请求。

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

<代码>新建OutputStreamWriter(connection.getOutputStream(),“UTF-8”)

当然,另一个问题是,当您的任何参数包含必须在XML中转义的字符时,手工制作的XML文档就会失败,但情况不同。为什么不改用XML库呢


只是一个附加信息:Christoffer指向的文档还解释了您使用的请求示例仅适用于具有标准SMS字符集中字符的文本消息。对于Unicode字符支持,您必须使用不同的请求。

首先,
新字符串(smsContent.getBytes(“UTF-8”),“UTF-8”)
是一个冗余的往返,相当于
smsContent
。首先,通过UTF-8将字符串编码为字节,然后立即再次将其从字节中解码回来

第二,您将XML拼凑在一起的方法完全失败了。您不能仅仅连接字符串,希望最终得到格式良好的XML。举个例子,想想如果有人试图发送
”,会发生什么?使用XML库

第三,您正在隐式地为您的
OutputStreamWriter
使用平台默认编码,而不是显式地指定一种,这意味着您的代码只在那些随机出现的默认编码正确的机器上工作。我猜您的代码不会

第四,您混淆POST参数的方法被破坏了。您没有指定变量
message
是什么。我猜它是完整的XML文档,但是您试图将它作为POST参数发送到某种HTTP服务,在这种情况下,它需要转义/url编码。例如,如果有人试图发送消息
&data=&
?请澄清

另见

第五,由于您要发送到某个HTTP服务,可能有一些关于该服务的文档要发送什么编码或如何指定它,可能有一个HTTP头(可能是“
Content-type:application/x-www-form-urlencoded;charset=UTF-8
”?)。如果您自己无法理解,请向我们指出文档

编辑:找到文档:

它非常清楚地指出,您需要对XML文档进行url编码,因此这可能是您缺少的,在这种情况下,
OutputStreamWriter
的编码只要是ASCII兼容的,就不重要了

但是,文档没有指定url编码使用的字符编码,这是非常弱的。UTF-8是最有可能的。

首先,
新字符串(smsContent.getBytes(“UTF-8”),“UTF-8”)
是一个冗余的往返,相当于
smsContent
。首先通过UTF-8将字符串编码为字节,然后立即再次从字节中解码回来

第二,你把XML拼凑在一起的方法完全被打破了。你不能仅仅把字符串串联起来,然后希望得到格式良好的XML。举个例子,想想如果有人试图发送一个
”,会发生什么?使用XML库

第三,您隐式地为
OutputStreamWriter
使用平台默认编码,而不是显式地指定一种编码,这意味着您的代码只在那些随机使用正确编码作为默认编码的机器上工作。我猜你的不是

第四,你把帖子参数混为一谈的方法被打破了。您尚未指定变量
message
是什么。我是