Web开发中的中文乱码

1、在服务端将请求和响应设置成相同的UTF-8字符编码; 如: request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); 2、将发送过来的数据用String类型重构 如: String str = request.getAttribute("test"); String newString = new String(str.getBytes("iso-8859-1"),"UTF-8");

1、在服务端将请求和响应设置成相同的UTF-8字符编码;

如:

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

2、将发送过来的数据用String类型重构

如:

String str = request.getAttribute("test");
String newString = new String(str.getBytes("iso-8859-1"),"UTF-8");

3、将客服端的URL调用一次encodeURI()方法(该方法是javascript中的),适用于浏览器不是用 UTF-8编码方式发送的情况。如:

var url = “Servlet?name=”+ encodeURL("将要传递的中文字符");

服务端:

String str = request.getAttribute("test");
String newString = new String(str.getBytes("iso-8859-1"),"UTF-8");

4、将客服端的URL调用两次encodeURI()方法(该方法是javascript中的)

客服端:

var url = “Servlet?name=”+ encodeURL(encodeURL("中"));

服务端:

String str = URIDecoder.decode(request.getAttribute("temp"),"UTF-8");

解析:

第一次encodeURL(): %E4%B8%AD

第二次encodeURL():  %25E4%25B8%25AD (将第一次的%符号转换成了25)

服务端:

第一次解码:服务器收到数据是会进行一次转码,用默认转码的编码方式,如:

String str = request.getParameter("test");  ==》 %E4%B8%AD

注:此时客服端发送过来的全部是英文字符,因此任何编码方式解码都是一样的。

第二次:用java显示的指定的编码解码。如:

String str = URIDecoder.decode(request.getAttribute("temp"),"UTF-8"); ==》“中”

注意:在所有的编码中,英文是不变的。也就是说英文字符的编码是统一的,如:‘a’用UTF-8和 iso8859-1编码后是一样的。因为中文在不同的编码方式是不一样的,才出现中文乱码。基本思路是,将中文发送和接收都用一种编码方式。但是,在传输过程中将其全部转换成英文。如:

客户端:

"中"——>%E4%B8%AD——>%25E4%25B8%25AD

  |

  | 传输过程 %25E4%25B8%25AD

  |

服务端:   

"中"<—— %E4%B8%AD<—— %25E4%25B8%25AD

游手好闲地学习,并不比学习游手好闲好。 —— 约翰·贝勒斯
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号