中文乱码解决方案
1.利用String[也是最常用的方式]
String username = new String(username.getBytes("ISO-8859-1"), "UTF-8"); //通过默认的编码获取到byte[],然后进行UTF-8再次编码
2.在tomcat中的server.xml进行配置URIEncoding="UTF-8"
<Connector
URIEncoding="UTF-8"
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
3.使用JavaScript对传递的参数进行编码
额外阅读
Js编码的几种方式区别:
1.window.escape()与HttpUtility.UrlEncodeUnicode()编码格式一样:将一个汉字编码为%uxxxx格式
不会被window.escape编码的字符有:@ _ - . * / + 这与http://www.w3school.com.cn/js/jsref_escape.asp上的解释不符合
2.window.encodeURIComponent()[我推荐使用这种方式]与HttpUtility.UrlEncode()编码格式一样:将一个汉字编码为%xx%xx%xx的格式
不会被window.encodeURIComponent编码的字符有:' ( ) * - . _ ! ~ 这与http://www.w3school.com.cn/js/jsref_encodeURIComponent.asp解释相符合
不会被HttpUtility.UrlEncode编码的字符有:' ( ) * - . _ ! 相比较而言,HttpUtility.UrlEncode比window.encodeURIComponent多一个 ~ 编码
3.不会被window.encodeURI编码的字符有: - _ . ! * ( ) ; / ? : @ & = , #,与encodeURIComponent对比,发现encodeURI不对:;/?:@&=+, #,与encodeURIComponent对比,发现encodeURI不对:;/?:@&=+,#这些用于分隔 URI 组件的标点符号进行编码
事例演示说明
JavaScript代码:
window.self.location="searchbytext.action?searchtext="+encodeURIComponent(encodeURIComponent(seartext));
java后台处理代码:
searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");
/*
为什么要两次编码的原因:后台java代码给searchtext赋值的时候,本身已经使用了一次解码,不过解码的结果依然不对。
所以我们可以在页面上进行两次编码操作,这样后台自动的那次就可以抵消掉一次,
然后在使用searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");进行一次解码就好了。
【这种方式还是用的比较多的,我个人使用的比较少】
*/