GBK与UTF-8之间的转换

论坛 期权论坛     
选择匿名的用户   2021-5-24 00:13   1223   0
<div class="multicntwrap">
<div class="multicnt">
  <div>
   <h3 class="title pre fs1"><span class="tcnt"><span style="font-family:微软雅黑; font-size:24px">GBK与UTF-8之间的转换</span></span>  <span class="bgc0 fc07 fw0 fs0"></span></h3>
   <p class="tdep clearfix nbw-act fc06" style="line-height:20px"><span class="pleft"><span class="blogsep">2012-03-02 21:53:46</span><span class="blogsep">|  分类:</span> <a class="fc03 m2a" href="http://linapex.blog.163.com/blog/#m&#61;0&amp;t&#61;1&amp;c&#61;fks_084064085085081068080084081095085094088065087081083066082" title="Java"> Java</a> <span class="blogsep phide" id="$_blogTagTitle">|  标签:</span><span class="fc03 phide" id="$_blogTagInfo"></span> </span><span class="pright fc07 ztag"><span class="blogsep">|</span><span class="zihao fc03" id="$_fontswitch">字号<span class="zihaoshow  phide" id="$_fontsTypes"><span class="zihaoc bdc0"><span class="stag"></span><span class="fc04 stag">大</span><span class="fc04 stag selected js-fcurrent fc05">中</span><span class="fc04 stag">小</span></span></span></span></span><span class="pright pnt fc03" id="$_blog_subscribe"><span class="iblock icn0 icn0-919"> </span><a class="m2a">订阅</a></span> </p>
  </div>
</div>
</div>
<div></div>
<div class="nbw-blog-start"></div>
<div class="bct fc05 fc11 nbw-blog ztag js-fs2">
<span style="font-family:Verdana"><span style="font-size:10pt">在很多论 坛、网上经常有网友问“ 为什么我使用 new String(tmp.getBytes(&#34;ISO-8859-1&#34;), &#34;UTF-8&#34;) 或者 new String(tmp.getBytes(&#34;ISO-8859-1&#34;), &#34;GBK&#34;)可以得到正确的中文,但是使用 new String(tmp.getBytes(&#34;GBK&#34;), &#34;UTF-8&#34;) 却不能将GBK转换成UTF-8呢?”<br> <br> 参考前面的</span></span>
<a href="http://www.blogjava.net/pengpenglin/archive/2010/02/22/313652.html" title="【Java基础专题】编码与乱码(03)----String的toCharArray()方法测试"><span style="font-family:Verdana"><span style="font-family:Verdana"><span style="font-size:10pt">【Java基础专题】编码与乱码(03)----String的toCharArray()方法测试 </span></span></span></a>
<span style="font-family:Verdana"><span style="font-family:Verdana"><span style="font-size:10pt">一文,我们就知道原因了。因为如果客户端使用GBK、UTF-8编码,编码后的字节经过ISO-8859-1传输,再用原来相同的编码方式进行解码,这个过程是“无损的转换”---- 因为原始和最终的编码方式相同。<br> <br> 但是如果客户端使用GBK编码,到了服务器端要转换成UTF-8,或者相反的过程。想一想,字节还是那些字节,但是编码的规则变了。原来GBK编码后的4个字节要用UTF-8的每个字符3个字节的规则编码,怎么能不乱码呢?<br> <br> 所以从现在开始,不要再犯这种错误了。new String(tmp.getBytes(&#34;GBK&#34;), &#34;UTF-8&#34;) 这个过程,JVM内部是不会帮你自动对字节进行扩展以适应UTF-8的编码的。正确的方法应该是根据UTF-8的编码规则进行字节的扩充,即手动从2个字 节变成3个字节,然后再转换成十六进制的UTF-8编码。<br> <br> 在这个专题的第一篇文章</span></span></span>
<a href="http://www.blogjava.net/pengpenglin/archive/2010/02/16/313177.html" title="【Java基础专题】编码与乱码(01)---编码基础"><span style="font-family:Verdana"><span style="font-family:Verdana"><span style="font-size:10pt">【Java基础专题】编码与乱码(01)---编码基础 </span></span></span></a>
<span style="font-family:Verdana"><span style="font-family:Verdana"><span style="font-size:10pt">开头,我们就已经介绍了这个规则:<br> <strong style="color:red">①得到每个字符的2进制GBK编码<br> ②将该16进制的GBK编码转换成2进制的字符串(2个字节)<br> ③分别在字符串的首位插入110,在第9位插入10,在第17位插入10三个字符串,得到3个字节<br> ④将这3个字节分别转换成16进制编码,得到最终的UTF-8编码。</strong><br> <br> <img alt="" border="0" height="345" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-8caef11e6535e2fbb1b5471854fd3bbd.JPG" width="628"><br> <br> 下面给出一个从网络上得到的Java转码方法,原文链接见:</span></span></span>
<a href="http://jspengxue.javaeye.com/blog/40781"><span style="font-family:Verdana"><span style="font-family:Verdana"><span style="font-size:10pt">http://jspengxue.javaeye.com/blog/40781</span></span></span></a>
<span style="font-family:Verdana"><span style="font-family:Verdana"><span style="font-size:10pt">。下面的代码做了小小的修改<br> <br> </span></span></span>
<pre class="blockcode"><p><span style="font-family:Verdana"><span style="color:#00ff"><span class="kwd"><span style="font-family:宋体">package</span></span></span><span style="color:#000000"><span style="font-family:宋体"><span class="pln"> example</span><span class="pun">.</span><span class="pln">encoding</span><span class="pun">;</span>
<span class="pln"> </span><img align="top" alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-4f1150b881333f12a311ae9ef34da474.gif">
<span class="pln"> </span><img align="top" alt="" id="Codehighlighter1_27_72_O
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP