📄 sms中用unicode编码发送中文.htm
字号:
lang=EN-US>int outleft = BUFLEN;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><O:P></O:P></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US>iconv_t cd;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US>if((cd = iconv_open(“gb2312”, “unicode”)) ==
(iconv_t)-1)</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><SPAN
style="mso-tab-count: 2">
</SPAN>return –1;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US>if(iconv(cd, &pin, &inleft, &pout,
&outleft) == (size_t)-1)</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><SPAN
style="mso-tab-count: 2">
</SPAN>return –1;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US>iconv_close(cd);</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
lang=EN-US><O:P></O:P></SPAN></P></V:TEXTBOX></V:SHAPE><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
absolute;z-index:1;left:61px;top:883px;width:522px;height:432px'><img
width=522 height=432 src="new_page_2.files/image001.gif"
alt="文本框: #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); "
v:shapes="_x0000_s1025"></span><![endif]>
<P></P><SPAN style="Z-INDEX: 1; POSITION: absolute">
<TABLE cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD
style="BORDER-RIGHT: #d4d0c8; BORDER-TOP: #d4d0c8; BORDER-LEFT: #d4d0c8; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent"> </TD></TR></TBODY></TABLE></SPAN>
<P><SPAN lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P><BR clear=all> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><FONT
size=3><SPAN style="FONT-FAMILY: 宋体">使用</SPAN><SPAN
lang=EN-US> iconv () </SPAN><SPAN
style="FONT-FAMILY: 宋体">时,需要注意参数的使用,</SPAN><SPAN
lang=EN-US>inleft </SPAN><SPAN
style="FONT-FAMILY: 宋体">是输入缓冲区数据数据长度,</SPAN><SPAN
lang=EN-US>outleft</SPAN><SPAN
style="FONT-FAMILY: 宋体">是输出缓冲区大小。(需要保证输出缓冲区足够大)。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><FONT
size=3><SPAN style="FONT-FAMILY: 宋体">转换以后,</SPAN><SPAN
lang=EN-US>outleft </SPAN><SPAN
style="FONT-FAMILY: 宋体">是</SPAN><SPAN
lang=EN-US>outbuf</SPAN><SPAN
style="FONT-FAMILY: 宋体">中空闲空间的大小,所以</SPAN><SPAN lang=EN-US>
BUFLEN-outleft </SPAN><SPAN
style="FONT-FAMILY: 宋体">才是真正的</SPAN><SPAN
lang=EN-US>Unicode</SPAN><SPAN
style="FONT-FAMILY: 宋体">数据长度。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><FONT
size=3><SPAN style="FONT-FAMILY: 宋体">注意:不论是</SPAN><SPAN
lang=EN-US>GB2312</SPAN><SPAN
style="FONT-FAMILY: 宋体">编码,还是</SPAN><SPAN
lang=EN-US>Unicode</SPAN><SPAN
style="FONT-FAMILY: 宋体">编码,在内存中都是一些字节序列,所以我们可以统一用</SPAN> <SPAN
style="FONT-FAMILY: 宋体">类型为</SPAN><SPAN lang=EN-US>
char</SPAN><SPAN style="FONT-FAMILY: 宋体">(或者</SPAN><SPAN
lang=EN-US>unsigned char</SPAN><SPAN
style="FONT-FAMILY: 宋体">)的字符数组来保存。所以,</SPAN><SPAN
lang=EN-US>BUFLEN-outleft </SPAN><SPAN
style="FONT-FAMILY: 宋体">是</SPAN> <SPAN
style="FONT-FAMILY: 宋体">字符(</SPAN><SPAN
lang=EN-US>char</SPAN><SPAN
style="FONT-FAMILY: 宋体">)个数,而不是</SPAN><SPAN
lang=EN-US>Unicode</SPAN><SPAN
style="FONT-FAMILY: 宋体">字符个数。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt"><SPAN
lang=EN-US><FONT size=3>2、</FONT><SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN><B><SPAN lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Unicode 编码到 16-bit
编码的转换</SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><FONT
size=3><SPAN style="FONT-FAMILY: 宋体">在得到</SPAN><SPAN
lang=EN-US> Unicode</SPAN><SPAN
style="FONT-FAMILY: 宋体">编码以后,还需要转换到</SPAN><SPAN lang=EN-US>
PDU </SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN
lang=EN-US>16-bit </SPAN><SPAN
style="FONT-FAMILY: 宋体">编码,才可以正确的发送。在这个转换过程中,需要注意两点:</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><FONT
size=3><SPAN lang=EN-US>1</SPAN><SPAN
style="FONT-FAMILY: 宋体">)、</SPAN><SPAN lang=EN-US>Unicode
</SPAN><SPAN style="FONT-FAMILY: 宋体">编码最开始的</SPAN><SPAN
lang=EN-US> 0xFEFF</SPAN><SPAN
style="FONT-FAMILY: 宋体">标志要被去除,在</SPAN><SPAN
lang=EN-US>0xFEFF</SPAN><SPAN
style="FONT-FAMILY: 宋体">之后的内容,才是真正的</SPAN><SPAN
lang=EN-US>Unicode</SPAN><SPAN
style="FONT-FAMILY: 宋体">字符。(至于为什么有这个</SPAN><SPAN
lang=EN-US>0xfeff</SPAN><SPAN
style="FONT-FAMILY: 宋体">标志,知道的朋友告诉我一声,呵呵)。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><FONT
size=3><SPAN lang=EN-US>2</SPAN><SPAN
style="FONT-FAMILY: 宋体">)、</SPAN><SPAN lang=EN-US>Unicode
</SPAN><SPAN
style="FONT-FAMILY: 宋体">是双字节字符,由于我的系统是小端字节序(</SPAN><SPAN
lang=EN-US>little-endian</SPAN><SPAN
style="FONT-FAMILY: 宋体">),也就是说,在存储的时候,是先低位,后高位,例如“中”的</SPAN><SPAN
lang=EN-US>Unicode</SPAN><SPAN
style="FONT-FAMILY: 宋体">编码是</SPAN><SPAN lang=EN-US>
0x4E2D</SPAN><SPAN style="FONT-FAMILY: 宋体">,存储的时候是</SPAN><SPAN
lang=EN-US> 2D4E</SPAN><SPAN
style="FONT-FAMILY: 宋体">,在转换到</SPAN><SPAN lang=EN-US>
16-bit</SPAN><SPAN
style="FONT-FAMILY: 宋体">编码的时候,要注意这个顺序的不同。当然,如果你的系统是大端字节序(</SPAN><SPAN
lang=EN-US>big-endian</SPAN><SPAN
style="FONT-FAMILY: 宋体">),那么就不用这样做了。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><FONT
size=3><SPAN lang=EN-US>3</SPAN><SPAN
style="FONT-FAMILY: 宋体">)、为了将</SPAN><SPAN lang=EN-US>0x4E2D
</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN
lang=EN-US>Unicode</SPAN><SPAN
style="FONT-FAMILY: 宋体">编码转换到</SPAN> <SPAN lang=EN-US>“4E2D”
</SPAN><SPAN style="FONT-FAMILY: 宋体">的</SPAN><SPAN
lang=EN-US>16-bit</SPAN><SPAN
style="FONT-FAMILY: 宋体">编码,可以用</SPAN><SPAN lang=EN-US>
sprintf(buf, “%02X”, outbuf[i]) </SPAN><SPAN
style="FONT-FAMILY: 宋体">对每一个字节作转换。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN
lang=EN-US
style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">3、正确计算16-bit
编码的消息体长度</SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT
size=3><SPAN lang=EN-US>
PDU</SPAN><SPAN
style="FONT-FAMILY: 宋体">规范中,需要包括消息体的长度,这里你要小心计算。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
lang=EN-US><FONT size=3></FONT></SPAN> </P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -