我正在尝试从kannel发送阿拉伯语短信(或法语短信),但它没有完美地获得客户端(有时阿拉伯语单词??????),在对Bearebox,SMSBOX和SMSC之间发送的值进行了一些分析后,我发现编码错误发生在我的Bearbox和SMSBOX之间。
我在 http 请求中使用了charset=utf-8&coding=2
来发送短信,但出现了同样的问题
有没有人知道问题是什么或更好的解决方案?
这是我用来发送短信的代码
StringBuffer param = new StringBuffer()
param.append("http://localhost:1025/cgi-bin/sendsms?")
param.append(URLEncoder.encode("username","UTF-8")).append("=").append(URLEncoder.encode("xxx","UTF-8"))
param.append("&").append(URLEncoder.encode("password","UTF-8")).append("=").append(URLEncoder.encode("xxxx","UTF-8"))
param.append("&").append(URLEncoder.encode("to","UTF-8")).append("=").append(URLEncoder.encode(numTel,"UTF-8"));
param.append("&").append(URLEncoder.encode("charset","UTF-8")).append("=").append(URLEncoder.encode("utf-8","UTF-8"))
param.append("&").append(URLEncoder.encode("coding","UTF-8")).append("=").append(URLEncoder.encode("2","UTF-8"))
param.append("&").append(URLEncoder.encode("text","UTF-8")).append("=").append(URLEncoder.encode(text,"UTF-8"))
param.append("&").append(URLEncoder.encode("priority","UTF-8")).append("=").append(URLEncoder.encode(""+priority,"UTF-8"))
param.append("&").append(URLEncoder.encode("dlr-mask","UTF-8")).append("=").append(URLEncoder.encode("31","UTF-8"))
param.append("&").append(URLEncoder.encode("dlr-url","UTF-8")).append("=").append(URLEncoder.encode(urlString,"UTF-8"))
try{
URL url = new URL(param.toString())
System.out.println("INFO : Opening connection ")
HttpURLConnection urlconnection = (HttpURLConnection) url.openConnection()
System.out.println("INFO : Connection openned")
BufferedReader input = new BufferedReader( new InputStreamReader(urlconnection.getInputStream()))
String inputLine
while ((inputLine = input.readLine()) != null)
aResult.append(inputLine)
input.close()
}catch(Exception e){
e.printStackTrace()
return false
}
System.out.println("response : "+aResult.toString())
System.out.println("INFO : all sent disconnect.")
'
谢谢
我已经能够使用此HTTP请求示例发送阿拉伯语/法语短信:
StringBuffer param = new StringBuffer()
param.append("http://localhost:1025/cgi-bin/sendsms?")
param.append(URLEncoder.encode("username","UTF-8")).append("=").append(URLEncoder.encode("xxx","UTF-8"))
param.append("&").append(URLEncoder.encode("password","UTF-8")).append("=").append(URLEncoder.encode("xxxx","UTF-8"))
param.append("&").append(URLEncoder.encode("to","UTF-8")).append("=").append(URLEncoder.encode(numTel,"UTF-8"));
param.append("&").append(URLEncoder.encode("coding","UTF-8")).append("=").append(URLEncoder.encode("2","UTF-8"))
param.append("&").append(URLEncoder.encode("text","UTF-8")).append("=").append(URLEncoder.encode(text,"UTF-8"))
param.append("&").append(URLEncoder.encode("priority","UTF-8")).append("=").append(URLEncoder.encode(""+priority,"UTF-8"))
param.append("&").append(URLEncoder.encode("dlr-mask","UTF-8")).append("=").append(URLEncoder.encode("31","UTF-8"))
param.append("&").append(URLEncoder.encode("dlr-url","UTF-8")).append("=").append(URLEncoder.encode(urlString,"UTF-8"))
try{
URL url = new URL(param.toString())
System.out.println("INFO : Opening connection ")
HttpURLConnection urlconnection = (HttpURLConnection) url.openConnection()
System.out.println("INFO : Connection openned")
BufferedReader input = new BufferedReader( new InputStreamReader(urlconnection.getInputStream()))
String inputLine
while ((inputLine = input.readLine()) != null)
aResult.append(inputLine)
input.close()
}catch(Exception e){
e.printStackTrace()
return false
}
System.out.println("response : "+aResult.toString())
System.out.println("INFO : all sent disconnect.")
我不在我的请求中发送"字符集"参数,我只发送编码参数
我做了一些研究,我相信如果你指定 Kannel coding=2
期望编码为 UTF-16 的消息正文,至少如果我正确理解了这个讨论。
另外,您应该查看此文档。
您所要做的就是以下内容(kannel 版本 1.5):1-在您的卡内尔配置中的smsc组下添加alt-charset="UTF-8"2-例如,发送短信مرحبا时,您必须在sendsms命令中键入以下内容:text=مرحبا&charset=UTF-8&coding=1
使用 mysql 命令检查数据库,因为 webmin 等数据库管理工具可能无法识别阿拉伯字母