中文乱码问题解决方案

对于乱码的出现,总是出现一个解决一个,再次出现再次百度,但是对于根本性的问题从来都没有进行过深入的了解和思考,总是浅尝而止,这是我最大的问题,需要在今后的学习中改正。


URL编码:是一种浏览器用来打包表单输入的格式,每对name/value由&分开,每对来自表单的name/value用=分开


tomcat8以后默认编码格式是utf-8;tomcat7之前的都是iso8859-1,用做Web服务器

浏览器的编码基本上都是utf-8,也有GBK或GB2312,可以参考博客《浏览器编码设置》

eclipse软件Workspace默认是GBK,一般我们都修改成utf-8;jsp也修改为utf-8


所以,我们可以清楚的看到乱码是因为你的开发软件,服务器,浏览器的编码设置是不同的,那么我们需要做的就是把他们全部按照utf-8的编码传递数据和显示。


get请求

get请求是讲参数拼接在url路径上了,url路径是是按照ASCII码编码进行的,没有对应的中文。URL编码结束后就成了ASCII码表范围内的字符了,然后以iso-8859-1的编码方式转化为二进制,随着请求头一起发出去。到达服务器后,服务器先用iso-8859-1解码,这时候就是url编码的内容,所以乱码就显示出来了。

解决方案:

按照逆向国学,先iso-8859-1解码,然后再客户端解码"utf-8"

new String(request.getParameter("name").getBytes("iso-8859-1"),“客户端编码方式”)

或者在tomcat的server.xml中设置URIEncoding="utf-8"



post请求

表单中的参数值对是通过request包发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=UTF-8")中指定的编码进行对表单中的数据进行编码,发给服务器。

解决方案:

在服务器Request.setCharacterEncoding("utf-8")解码


encode编码和decode解码


public static void main(String[] args) {
try {
    	String name=URLEncoder.encode("你好", "UTF-8");
    	System.out.println(name);
    	name=URLDecoder.decode("你好", "UTF-8");
    	System.out.println(name);
	} catch (Exception e) {
	}
}

显示效果:

  

js中的decodeURI()方法相当于java.net.URLDecoder.decode(URIString, "UTF-8");
js中的encodeURI()方法相当于java.net.URLEncoder.encode(URIString, "UTF-8");


小结:没有无缘无故的乱码,只是大家的规则不同。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值