- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
短信中文编码的问题
字符集之:短信中文编码的问题收藏??SMS是由Esti 所制定的一个规范(GSM 03.40 和 GSM 03.38)。有两种方式来发送和接收SMS消息:文本模式或者PDU(protocol description unit)模式。文本模式只能发送普通的ASCII字符,而要发送图片、铃声、其它编码的字符(如中文)就必须采用PDU模式。PDU模式中,可以采用三种编码方式来编码要发送的内容,分别是 7-bit编码、8-bit编码、16-bit编码。7-bit编码用于发送普通的ASCII字符;8-bit编码通常用于发送数据消息,比如图片和铃声等;而16-bit编码用于发送Unicode字符。在这三种编码方式下,可以发送的最大字符数分别是 160、 140、 70。若要发送中文(或日文等),必须采用PDU模式的Unicode编码方式。我最近参与了一个在linux下收发短信的项目。其中,需要实现中文的发送和接收。由于原来没有中文编码、Unicode编码的经验,所以查了一些资料,也在一些论坛上提了一些问题。现在把它整理出来,希望对以后再做类似项目的朋友有个帮助。我写的比较简单,关于PDU的规范,可以看这里:/sustain/SMS_PDU-mode.pdf ,或者去wavecom的网站上找找看。1、 GB2312 编码到Unicode 编码的转换在 Redhat 7.3系统上,默认是用GB2312编码保存中文字符的(对于中英文混合的文本也是如此)。所以首先需要把 GB2312 编码的字符串转换到 Unicode编码的字符串。GB2312编码是一种多字节编码方式,对于中文,用2个字节表示,对于英文,用1个字节表示,就是英文的ascii码。(注:我没有仔细看过GB2312编码的规范,以上理解是实际开发中得出来的,不能保证正确性)。Unicode编码是双字节编码方式,对所有字符,都采用2个字节编码。在linux平台上,GB2312编码到Unicode编码的转换,可以有三种实现方式(或者更多):1)、用 mbstowcs () 函数。就是多字节编码到宽字符的转换。我试过它,可以正确的转换,但是这个函数可能不是很可靠。2)、用 GB2312 à Unicode 的转换表,手动查表转换。网上有这样的转换表,你需要对每一个GB2312字符,根据它是中文字符还是英文字符,分别转换。3)、用 iconv () 函数。这可能是linux上的标准的方法,不仅可以转换GB2312到Unicode,还可以在任意的两种编码之间转换(前提是linux系统要支持这些编码)。首先要用 iconv_open(), 打开一个转换句柄,指定两种转换前的编码和转换后的编码。然后用 icnov() 作转换。最后用 iconv_close()关闭句柄,释放资源。#include iconv.h #define BUFLEN 200 char inbuf[BUFLEN]; char outbuf[BUFLEN]; char* pin = inbuf; char* pout = outbuf; …打开文件,读入GB2312数据到inbuf,数据长度为 len int inleft = len; int outleft = BUFLEN; iconv_t cd; if((cd = iconv_open(“gb2312”, “unicode”)) == (iconv_t)-1) return –1; if(iconv(cd, pin, inleft, pout, outleft) == (size_t)-1) return –1; iconv_close(cd); 使用 iconv () 时,需要注意参数的使用,inleft 是输入缓冲区数据数据长度,outleft是输出缓冲区大小。(需要保证输出缓冲区足够大)。转换以后,outleft 是outbuf中空闲空间的大小,所以 BUFLEN-outleft 才是真正的Unicode数据长度。注意:不论是GB2312编码,还是Unicode编码,在内存中都是一些字节序列,所以我们可以统一用类型为 char(或者unsigned char)的字符数组来保存。所以,BUFLEN-outleft 是字符(char)个数,而不是Unicode字符个数。2、 Unicode 编码到 16-bit 编码的转换在得到 Unicode编码以后,还需要转换到 PDU 的16-bit 编码,才可以正确的发送。在这个转换过程中,需要注意两点:1)、Unicode 编码最开始的 0xFEFF标志要被去除,在0xFEFF之后的内容,才是真正的Unicode字符。(至于为什么有这个0xfeff标志,知道的朋友告诉我一声,呵呵)。2)、Unicode 是双字节字符,由于我的系
您可能关注的文档
最近下载
- 实施指南(2025)《GB_T21517-2008饲料添加剂叶黄素》.pptx VIP
- 2024年万家寨水务控股集团招聘考试真题 .pdf
- 热设计中的不确定因素.pptx VIP
- (高清版)DB1305∕T 36-2022 邢台酸枣仁.pdf VIP
- fanuc机器人r-2000ia机械单元维护手册.pdf
- 重庆轨道交通 15 号线工程机电设备系统(含装饰装修)采购及安装项目 110kv 电源线路土建工程施工交通组织方案.pdf VIP
- 纪委面试题目及答案.doc VIP
- 初中生家长家庭教育经验优秀演讲稿PPT.pptx
- Shimaden岛电SRS11A&12A&13A&14A系列数字调节器使用说明书.pdf
- (高清版)DB1305∕T 36-2022 邢台酸枣仁.docx VIP
有哪些信誉好的足球投注网站
文档评论(0)