解决中文乱码问题

    
    了解编码


    1,Unicode编码又称统一码、万国码、单一码,它是业界的一种标准,是为了解决传统的字符编码方案的局限而产生的,存在很多几种实现方式如:UTF-8、UTF-16等.
    
    2,UTF-8 是在互联网上使用最广的一种unicode的实现方式。可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
    
    3,在 ASCII 编码中,一个英文字母字符存储需要1个字节。在 GB 2312 编码或 GBK 编码中,一个汉字字符存储需要2个字节。
        在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。
        在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。
        在UTF-32编码中,世界上任何字符的存储都需要4个字节。
        
    4,GBK是GB2312的扩展,他向下与GB2312兼容,,向上支持 ISO 10646.1 国际标准        
    


    中文乱码大多数都是因为编码和解码的不一致造成的,所以我们可以从5个方面入手:1, JAVA 2, JAVA WEB 3, JAVA JSP 4, JAVASCRIPTE 5, TOMCAT


    
    理解java是如何来编码和被解码的


    
    第一步:当我们用编辑器编写java源文件,程序文件在保存时会采用操作系统默认的编码格式(一般我们中文的操作系统采用的是GBK编码格式)形成一个.java文件。java源文件是采用操作系统默认支持的file.encoding编码格式保存的。下面代码可以查看系统的file.encoding参数值。

    

System.out.println(System.getProperty("file.encoding"));


    第二步:当我们使用javac.exe编译我们的java文件时,JDK首先会确认它的编译参数encoding来确定源代码字符集,如果我们不指定该编译参数,JDK首先会获取操作系统默认的file.encoding参数,然后JDK就会把我们编写的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。

    第三步:JDK将上面编译好的且保存在内存中信息写入class文件中,形成.class文件。此时.class文件是Unicode编码的,也就是说我们常见的.class文件中的内容无论是中文字符还是英文字符,他们都已经转换为Unicode编码格式了。
    
    
    注意点:使用IO流时,若不指定编码格式时,默认的编码格式都是 系统编码 。因此若输入指定了编码格式,那么输入也要指定与输入一样的编码格式。
    


    理解JAVA WEB 编码


    1,不同浏览器编码格式:
    Firefox、chrome、IE都是采用UTF-8编码格式,对于Query String部分Firefox、chrome采用UTF-8,IE采用GBK。至于为什么会加上%,这是因为URL的编码规范规定浏览器将ASCII字符非 ASCII 字符按照某种编码格式编码成 16 进制数字然后将每个 16 进制表示的字节前加上“%”。
    
   2, URL 是在 org.apache.coyote.HTTP11.InternalInputBuffer 的 parseRequestLine 方法中. 对URI的解码操作是首先获取Connector的解码集,该配置在server.xml中,如果没有定义则会采用默认编码ISO-8859-1来解析。
    


    理解JAVA JSP页面编码过程


    
    JSP转换为servlet过程中下面一段代码为设置页面编码格式。

    

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>


    
    上面代码中有两个地方存在编码:pageEncoding、contentType的charset。其中pageEncoding是jsp文件本身的编码,而contentType的charset是指服务器发送给客户端时的内容编码。
    


    理解javascript编码的三个方法:escape()、encodeURI()、encodeURIComponent()


    
    1,escape:采用SIO Latin字符集对指定的字符串进行编码。所有非ASCII字符都会被编码为%xx格式的字符串,其中xx表示该字符在字符集中所对应的16进制数字。


    2,encodeURI :对整个URL进行编码,它采用的是UTF-8格式输出编码后的字符串。不过encodeURI除了ASCII编码外对于一些特殊的字符也不会进行编码如:! @ # $& * ( ) = : / ; ? + ‘。


   3, encodeURIComponent:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。相对于encodeURI,encodeURIComponent会更加强大,它会对那些在encodeURI()中不被编码的符号(; / ? : @ & = + $ , #)统统会被编码。但是encodeURIComponent只会对URL的组成部分进行个别编码,而不用于对整个URL进行编码。

 

    理解TOMCAT编码


    tomcat服务器使用的是ISO-8859-1编码格式来编码的,以我们只需要在tomcat的server.xml文件的<Connector>标签中加上URIEncoding=”utf-8″即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值