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编码结果相同。



  • 相关阅读:
    C++调用Java的Jar包(带参数)
    SOA创建Form表单
    vs2013 IntelliSense: "const char *" 类型的实参与 "LPCWSTR" 类型的形参不兼容
    idea无法正常使用SVN的解决方法
    关于C语言中print输出问题
    TC怎么在代码中实现选中一个TCCcomponent对象?
    Unity 1.0 中文文档:1 Unity 简介
    Unity(四):使用场景Ⅰ:建立类型映射
    这个世界上没有白干的活
    Unity(三):快速入门
  • 原文地址:https://www.cnblogs.com/vvch/p/4027574.html
Copyright © 2011-2022 走看看