您的位置:首页 > 其它

GPRS发送中文短信的问题

2010-07-24 19:52 369 查看
linux下,板子通过串口连接发送中文短信,关于串口设置,及发送英文短信很简单就不说了,先说说如何做,及遇到的问题。

linux下,在VIM(一定在vim中保存中文,这个问题下面再提)保存中文内容,通过iconv函数从当然语言编码转为GPRS的UCS2的编码。

int encode (char * message)
{
int src_len,dest_len=MAXSIZE;
iconv_t cd;
char buffer[MAXSIZE];
//char buffer[MAXSIZE]="有贼来入侵了";
strcpy(buffer,message);
char dest[MAXSIZE];
char * pin=buffer;
char * pout=dest;
src_len=strlen(buffer);

if((cd =iconv_open("UNICODEBIG","utf8"))== (iconv_t)-1)
{
perror("cann't open iconv_open function/n");
exit(-1);
}

if(iconv(cd, &pin,&src_len,
&pout,&dest_len) == (size_t)-1)
{
perror("cann't open iconv function/n");
exit(-1);
}
iconv_close(cd);

strcpy(message,dest);
return strlen(dest);
}

需要注意的就是iconv_open的二个参数,以前看到参数如GB2312 GB-ZN,参数传进去都是错误,我用的ubuntu,所以参数是utf8,虽然GPRS用的UCS2的编码,转化的时候用unicodebig编码的方式,发送中文短信接收的时候,都能正常的显示。

还有个问题是存储中文的内容一定要用VIM保存,并且不能再用GEDIT打开 或者你把源文件拷到windows下添加几行注释,再拷回编译照样编码转化时出错。虽然gedit上设置为utf8编码,这样问题依然存在。

另外一个问题说,中英文短信混编的问题。linux下保存中文,一个中文字符,按unicode应该是二个字节,但是vim保存中文的时候,很少有情况是二个字节,大部分情况是三个字节。保存英文字符那是很固定,都是一个字节。中英文混编的问题出来了,vim可以自动识别中英文,并且按三字节和一个字节保存,并且都不知道如何区分中英文(如果英文恰好作为中文的第一个字节,如何区分,是作为英文还是作为中文的第一个字节)。中英文短信混遍的问题,接受的手机显示的时候,从字符开始以后都是乱码。

另外需要注意的就是,GPRS发送AT指令以/r结束,GPRS回的时候大部分以/n/t开始和结束。短信内容以/x1a(ctrl+Z)结束。还有个需要注意的是,有的时候每个字节要格式化成二位的十六进制输出。

遇到的几个问题,如果你有高见,请指点下,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: