短消息发送7Bit AscII编码符号的问题
在以前写的一个通过GSM模块发送与接收短消息的业务系统已经运行很久了。前两天检查接收内容时发现有接收的内容中有乱码。与发送者联系了,了解他发送的是一些字母中间有下划线。因为接收纯字母已经做过测试了。我自己编辑了一条短消息“_”发上去,发现收到的也是乱码,再发别的AscII字母,完全正常。再发看来问题出在短消息对符号的解码上。
仔细检查了一遍解码程序,没有发现问题。然后又在网上找了一段别人的解码代码,来进行测试,居然发现解码后的符号也是乱码。打开数据库将原始接收的Byte字符串找出来,看到接收到的内容是“11”,十进制为17,是不可见字符,而“_”的AscII码是95。又将“_”附近的几个字符试了一下,居然值都与AscII码值不相符。
只好Google了,搜了一下“7 bit ”,找到了一个文件”The 7 bit default alphabet”,打开一看,晕,居然有个GSM 03.38规定了127个7 Bit字符,与标准的ISO-8859-1不相符。
只好重新写一个对字符映射表了。本来想用一个数组或Hashtable来做映射,但是有几个字符居然点用两个Byte。牺牲点内存与CPU算了,在内存里建了个数据表,将映射表做到DataTable里了,然后用DataView的RowFilter来查找。可慢了一点,但用起来方便。
源码如下:
public class Gsm7BitEncoding
{
DataTable dt7BitAlphabet = new DataTable();
DataView dv;
&