zoukankan      html  css  js  c++  java
  • java编码终极探秘

    首先要明白,java中string字符串都是unicode码保存的,只不过显示的时候会根据一定的规则,比如GBK或者是UTF-8去对照表中查找进行显示。


    之所以会乱码就是因为使用错了编码方式。
    数据是要用来保存和传输的,在保存和传输的时候必定会使用一种默认的编码方式(Charset.default().name())可以获得.
    本质上来讲,所有的数据在计算机中都是二进制,都是字节,“中”是两个字节,byte[2].按照utf-8和gbk编码方式来保存,这两个字节内容是肯定不一样的,但是在string中对应的unicode是一样的。
    new String("中文".getBytes("UTF-8"),"GBK").就是将 “中文”转换为"UTF-8"字节,然后在GBK对照表中查找显示,肯定会乱码;




    http://wenku.baidu.com/link?url=HSXqdRMUpM78cpw42snv5st54ppevjjTLI7js3psIbXyRLo_5x6zndAVWlJ5sCCepA9HpQ1U7yHQYKrn-2fI1-syt-UwEnSTQ_hpCT1JSBi


    解决方案:
    1、使用encodeURI编码,java中解码  看看编码方式的不同


    2、自己实现,使用unicode传递


    escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z 
    encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z 
    encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z 


    在前端页面直接传递参数时,普通可以使用escape和encodeURIComponent;
    如果要向后台传递参数就要使用encodeURI,对应到java解码使用URLDecoder.decode(logo_name,"UTF-8");
    1、传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。                          
    例如:
    <script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7& u='+encodeURIComponent
    ("http://cang.baidu.com/bruce42")+'">退出</a& gt;');</script>


    2、进行url跳转时可以整体使用encodeURI
    例如: Location.href=encodeURI(http://cang.baidu.com/do/s?word=中国&ct=21);
    使用这个方法编码的字符在PHP中可以使用urldecode()函数反编码


    3、js使用数据时可以使用escape

    escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。



  • 相关阅读:
    vim 编辑器使用
    PHP高并发高负载系统架构(转载)
    类的使用
    linux下EC20 4G模块驱动移植
    linux 4G模块拨号脚本
    linux4.1.4上移植ME909s-821,MU609 4G模块驱动
    shell脚本语之运算符
    vim的列编辑操作
    linux下普通用户添加 sudo 免密码
    4G模块在AM335x上的移植
  • 原文地址:https://www.cnblogs.com/vvch/p/4027574.html
Copyright © 2011-2022 走看看