WEB应用常见中文数据乱码问题总结

WEB应用常见中文数据乱码问题总结

在实际工作中,会遇到很多中文数据的乱码的问题,之所以会产生乱码,就是因为服务器和客户端沟通的编码不一致造成的,因此解决的办法是:在客户端和服务器之间设置一个统一的编码,之后就按照此编码进行数据的传输和接收。

1、以POST方式提交表单中文参数的乱码问题

客户端是以UTF-8字符编码将表单数据传输到服务器端,因此服务器也需要设置以UTF-8字符编码进行接收,服务器可以直接使用从ServletRequest接口继承而来的"setCharacterEncoding(charset)"方法进行统一的编码设置。代码如下:

public void doPost(HttpServletRequestrequest, HttpServletResponse response)

            throws ServletException,IOException {

       /**

        * 客户端是以UTF-8编码传输数据到服务器端的,所以需要设置服务器端以UTF-8的编码进行接收         */

       request.setCharacterEncoding("UTF-8");

}

 

2、以GET方式提交表单中文参数的乱码问题

如果是用get的方式提交表单,通过request.setCharacterEncoding("UTF-8");这种方式是解决不了中文乱码问题

对于以get方式传输的数据,默认的还是使用ISO8859-1这个字符编码来接收数据,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端的编码不一致。

解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。代码如下:

public void doGet(HttpServletRequestrequest, HttpServletResponse response)

            throws ServletException,IOException {

       /**

         * 对于以get方式传输的数据,request默认的还是使用ISO8859-1编码接收数据

        */

       String name = request.getParameter("name");//接收数据

       name =new String(name.getBytes("ISO8859-1"),"UTF-8") ;//将ISO8859-1字符转换为UTF-8

}

 

3、以超链接(URL)形式传递中文参数的乱码问题

超链接数据是以get的方式传输到服务器的,所以接收中文数据时也会产生中文乱码问题,而解决中文乱码问题的方式与上述的以get方式提交表单中文数据乱码处理问题的方式一致。

 

4、中文数据乱码问题总结

1、如果提交方式为post,想不乱码,只需要在服务器端设置request对象的编码即可,客户端以哪种编码提交的,服务器端的request对象就以对应的编码接收,比如客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接收(request.setCharacterEncoding("UTF-8"))

2、如果提交方式为get,设置request对象的编码是无效的,request对象还是以默认的ISO8859-1编码接收数据,需要将ISO8859-1编码数据转换为需要的编码类型,比如UTF-8:

String name =request.getParameter("name");//接收数据

       name =new String(name.getBytes("ISO8859-1"),"UTF-8") ;//将ISO8859-1字符转换为UTF-8

 

3、如果是使用链接直接提交数据,那么参考get的提交方式;

4、中文数据乱码的终极解决之道,就是让系统在传输过程中,没有中文,那么自然就没有了乱码一说。简单的说,就是把中文在数据传输之前做转码,在数据传输之后做解码。

比如:

java.net.URLEncoder.encode("要转码的内容","UTF-8"); // 原来单参数方法已经过时。

如果仔细观察,我们在百度搜索之后,百度的中文都会变成编码符号传输,用的就是encode的方法。

用百度搜索:中文乱码

如果能看到链接的话,内容如下:http://www.baidu.com/s?ie=UTF-8&wd=%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。