⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sms中用unicode编码发送中文.htm

📁 短信收发源代码,集中一个类阐明了 其原理,对大家肯定有帮助撒!
💻 HTM
📖 第 1 页 / 共 4 页
字号:
                  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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  </SPAN>return –1;</SPAN></P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US>if(iconv(cd, &amp;pin, &amp;inleft, &amp;pout, 
                  &amp;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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  </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 &lt;iconv.h&gt;&#13;&#10;&nbsp;&#13;&#10;#define BUFLEN 200&#13;&#10;char inbuf[BUFLEN];&#13;&#10;char outbuf[BUFLEN];&#13;&#10;char* pin = inbuf;&#13;&#10;char* pout = outbuf;&#13;&#10;&nbsp;&#13;&#10;…打开文件,读入GB2312数据到inbuf,数据长度为 len&#13;&#10;&nbsp;&#13;&#10;int inleft = len;&#13;&#10;int outleft = BUFLEN;&#13;&#10;&nbsp;&#13;&#10;iconv_t cd;&#13;&#10;if((cd = iconv_open(“gb2312”, “unicode”)) == (iconv_t)-1)&#13;&#10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return –1;&#13;&#10;if(iconv(cd, &amp;pin, &amp;inleft, &amp;pout, &amp;outleft) == (size_t)-1)&#13;&#10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return –1;&#13;&#10;iconv_close(cd);&#13;&#10;&nbsp;&#13;&#10;"
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>&nbsp;</P>
                  <P> </P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</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>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</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'">&nbsp; 
                  </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>&nbsp;</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>&nbsp;</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>&nbsp;</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, &nbsp;“%02X”, &nbsp;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>&nbsp;</P>
                  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN 
                  lang=EN-US><FONT size=3></FONT></SPAN>&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  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>&nbsp;</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -