<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=0&t=1&c=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("ISO-8859-1"), "UTF-8") 或者 new String(tmp.getBytes("ISO-8859-1"), "GBK")可以得到正确的中文,但是使用 new String(tmp.getBytes("GBK"), "UTF-8") 却不能将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("GBK"), "UTF-8") 这个过程,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 |
|