在Web项目的开发中,常常会遇到各种各样的字符乱码的问题,对于小白来说有时候一个小小的问题会耗费很长时间才能够解决。

        因此本文将开发过程中可能遇到的字符乱码问题,做出一个小总结,供大家参考。

        要想解决字符乱码问题,首先需要了解什么是字符集,以及不同的字符集之间的关系,只有理解了这两点,才能够更快的帮助我们定位字符乱码的原因。

       字符集(Character Set):是指多个字符的集合。不同的字符集包含的字符个数不一样、包含的字符不一样、对字符的编码方式也不一样。例如GB2312是中国国家标准的简体中文字符集,GB2312收录简化汉字(6763个)及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。而ASCII字符集只包含了128字符,这个字符集收录的主要字符是英文字母、阿拉伯字母和一些简单的控制字符。

        另外,还有其他常用的字符集有 GBK字符集、GB18030字符集、Big5字符集、Unicode字符集等。

        字符编码(Character Encoding):字符编码是指一种映射规则,根据这个映射规则可以将某个字符映射成其他形式的数据以便在计算机中存储和传输。例如ASCII字符编码规定使用单字节中低位的7个比特去编码所有的字符,在这个编码规则下字母A的编号是65(ASCII码),用单字节表示就是0x41,因此写入存储设备的时候就是二进制的 01000001。每种字符集都有自己的字符编码规则,常用的字符集编码规则还有 UTF-8编码、GBK编码、Big5编码等。

        综上所述,字符集就是一组字符的集合,而不同的字符集对于同一字符的编码格式不同,因此解码的格式也不同,所以当我们在不同的环境下使用的编码和解码的字符集不一致时,就会导致出现字符乱码的问题,例如:编辑文件时使用的是A字符集,它对于 ‘¥’ 字符的编码是01001011,而打开文件时,使用的是B字符集,其01001011 对应的字符是 ‘&’,则打开的文件显示的内容就会变为&。从而导致字符乱码。

        下面介绍我在web开发中遇到的字符集乱码问题,以及解决办法:

      一、HTML页面乱码

                例如我们在页面中编写代码时,明明使用的是中文,可是浏览器打开时,却乱码了。

这是由于我们在编写页面源代码时,使用的字符集并不包含中文字符,例如:ISO标准的字符 集,就不包含中文字符,因此它显示的中文字符内容都是 ? 号

 解决办法:

        修改源文件的字符集为支持中文字符的字符集,例如:UTF-8、GBK等

二、JSP页面乱码问题

       当遇到JSP文件出现中文乱码问题的时候,首先检查JSP的指令是否完整:

 JSP的指令用于设置整个页面的属性,其中Page指令中的contentType:用于指示JSP文件的类型,以及使用的字符集。例如此句中:text/html 就指明了该文件是一个html文本,charset=utf-8 就指明了该文件使用的字符集时utf-8.

        当该JSP页面发送请求时,contentType中的内容也会被包含在请求头中,一起发送过去。

        若页面加了该指令语句且字符集也支持中文,还是出现乱码,则检查以下是否浏览器的解码字符集有问题。

三、Servlet获取请求参数

        在Servlet中,获取页面请求发过来了中文参数时,也会遇到中文乱码的问题。可能的原因是。

        获取参数时没有指定解码字符集。

        解决办法:在使用request获取参数之前,先执行request.setCharacterEncoding("utf-8");语句。

        若加上了该语句以后还是出现中文乱码问题,则有可能是在请求传输过程中出了问题。因为中文参数在请求传输的过程中是先编码为URI编码,然后进行传输。到达服务器以后再将URI编码进行解码,得到原来的内容。现在大部分浏览器使用的URI编码是UTF-8的,而Tomcat服务器使用的默认字符集是ISO,因此就有可能导致出现字符乱码的问题。

        解决办法:修改Tomcat的配置文件。打开Tomcat目录下的 conf/server.xml ,找到

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />语句,将其改为:

<Connector port="8080"  protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /> 

修改了Tomcat服务器默认的URI解码方式为UTF-8以后,Tomcat服务器就可以正确的处理get请求中的中文参数了。

        如果是MAVEN项目,则再pom.xml文件中,找到Tomcat插件的坐标,在

<configuration></configuration>标签中,加上<uriEncoding>UTF-8</uriEncoding>即可

四、浏览器解析Servlet响应信息出现乱码

        该问题一般是因为没有指定信息文本类型 ,即contentType。该响应头是告诉浏览器传输过来的数据为什么类型,应该以那种字符集进行解析,因此解决办法就是再发送中文的响应信息之前,指定该响应头的值,例如:text/html;charset=utf-8  如果是json数据则数据类型修改为application/json (其它数据类型的值,建议百度查询)

        以上就是博主再Web项目的开发过程中遇到的字符集乱码问题,希望对大家有帮助。(本文内容将持续更新,假如我遇到了新的问题后...)

若对本文内容有疑问或建议,欢迎评论区留言!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐