通过SMPP连接SMSC发送短信(转)

(转) 最近公司的一个业务,因为每日有百万条以上的短信,出现了严重的短信延迟问题。与运营商沟通之后,允许我们直接连SMSC下行业务短信,不用再通过SMG了。

所以需要通过SMPP来发送。以前做过湖南移动梦网项目,也通过SMPP连过SMSC,依稀记得有现成的SMPP实现API可用,于是google了一把,果然发现开源项目:Java SMPP [email protected]

把API Download下来一看,呵呵,实现了SMPP协议,还提供了example程序,好用得很。

于是把各项配置弄好,直接在Example上修改了一下,发送了一条短信到自己的手机,英文短信OK!

再试一下中文,问题来了:不论我把中文如何转码,手机收到的都是乱码,晕死!咨询局方技术人员,也说不出一个子丑寅卯,只是告诉我,SMSC是中兴的,中文字符需按照Unicode编码,消息的DCS(Data Coding Schema)设为8即可。

无数次尝试之后,终于发现,把整个Java Project的Text Encoding设为UTF8,然后直接将中文字符串以UTF16格式获取Byte[],即通过语句
byte[] msgBytes = "中文字符串".getBytes("UTF16");
获得byte[]直接丢给SMPP API实现的Submit包即可显示中文,但是还有一个小小的问题,手机显示的字符串前总有一个非常规的字符,这个字符在Samsung手机上显示为一个方框,LG手机上显示为一个空格,Moto手机上显示为一个反黑的空格,非常烦人。比较了一下获取的byte[]的长度,发现确实比文字长度长了两个字节,于是试着把该byte[]的前两个byte去掉再试,果然一切OK了。

运行环境是Redhat Linux AS 3,字符集设置为GB18030。因为找到了上述的workaround来解决中文问题,我没有时间去尝试运行环境字符集设定对中文的影响了。

你可能感兴趣的:(一些技术点)