中文乱码问题一直是头疼我们在web开发当中的事情 笔者现在总结一下在web开发当中中文乱码的解决办法
办法1.在页面端 做一次encodeURL() 然后在应用服务器端做一次getByte() 转换
示例代码:
页面端发出 var url=encodeURL(document.getElementById("表单元素ID"));
服务端接收 String userName=new String(request.getParameter("参数名").getByte("iso8859-1","UTF-8"));
此方法适用于默认的应用服务器配置(大多数应用服务器内部都对接收过来的参数按照iso-8859-1进行编码),但是有的应用服务器配置被更改之后(tomcat,weblogic都可以在配置文件里面对接收参数编码进行修改) 就不使用了,因为这里写死了用iso-8859-1解码再用UTF-8编码.
方法2:(建议使用) 在页面端做两次encodeURL() 然后在应用服务器端做一次URLDecoder.decode() 就可以保证顺利解决中文乱码问题
笔者使用firefox的 debug跟踪了一个"中"字的详细转换过程如下
var userName=document.getElementById("userName");
这句之后 userName 得到"中"字,
经过一次encodeURL(userName)之后得到一个字符串"%E4%B8%AD"(即一次UTF-8编码将"中"字转换为包含三个字节的字节数组E4B8Ad,每个字节对应一个16进制的表示)
再做一次encodeURL(encodeURL(userName))之后得到一个字符串"%25E4%25B8%25AD"
实际是将第一次前面的%转换为25
之后在服务端 尚未人工转换之前 即经过应用服务器内部之后变成"%E4%B8%AD",因为我们传过来的是"%25E4%25B8%25AD" 都是英文的字符,所以不管应用服务器内部使用怎样的解码解出来都是"%E4%B8%AD",所以我们再进行一次String userName=URLDecoder.decode(request.getParameter("userName"),"UTF-8") 得到的userName就为"中"
办法1.在页面端 做一次encodeURL() 然后在应用服务器端做一次getByte() 转换
示例代码:
页面端发出 var url=encodeURL(document.getElementById("表单元素ID"));
服务端接收 String userName=new String(request.getParameter("参数名").getByte("iso8859-1","UTF-8"));
此方法适用于默认的应用服务器配置(大多数应用服务器内部都对接收过来的参数按照iso-8859-1进行编码),但是有的应用服务器配置被更改之后(tomcat,weblogic都可以在配置文件里面对接收参数编码进行修改) 就不使用了,因为这里写死了用iso-8859-1解码再用UTF-8编码.
方法2:(建议使用) 在页面端做两次encodeURL() 然后在应用服务器端做一次URLDecoder.decode() 就可以保证顺利解决中文乱码问题
笔者使用firefox的 debug跟踪了一个"中"字的详细转换过程如下
var userName=document.getElementById("userName");
这句之后 userName 得到"中"字,
经过一次encodeURL(userName)之后得到一个字符串"%E4%B8%AD"(即一次UTF-8编码将"中"字转换为包含三个字节的字节数组E4B8Ad,每个字节对应一个16进制的表示)
再做一次encodeURL(encodeURL(userName))之后得到一个字符串"%25E4%25B8%25AD"
实际是将第一次前面的%转换为25
之后在服务端 尚未人工转换之前 即经过应用服务器内部之后变成"%E4%B8%AD",因为我们传过来的是"%25E4%25B8%25AD" 都是英文的字符,所以不管应用服务器内部使用怎样的解码解出来都是"%E4%B8%AD",所以我们再进行一次String userName=URLDecoder.decode(request.getParameter("userName"),"UTF-8") 得到的userName就为"中"