中文乱码问题

同一个JSP页面,提交的时候JS中用了encodeURIComponent(param)
解码:new String(request.getParameters(param).getBytes("ISO-8859-1"),'UTF-8');
数据库 Oracle NLS_CHARACTERSET : UTF8

问题是:
1. 本机加上(windows7) 提交数据库显示:??
2. 放到服务器上(windows xp)提交数据正常显示中文

如果把解码去掉
1. 本机上正常显示中文
2. 放到服务器上显示乱码李丽(不是??)

请问这是怎么回事啊?是什么问题
1. windows环境问题
2. Tomcat设置问题
3. JSP设置问题
4. Servlet问题
5. 数据库问题

4个回答

应该是new String(request.getParameters(param).getBytes("ISO-8859-1"),'UTF-8');出问题了,这种转换的前提是你的UTF-8的字符不经过处理,直接传输,但是encodeURIComponent是将字符串以UTF-8编码成了类ISO的形式了,你应该用java的encodeURI直接encodeURI(param)

好久没用JAVA了,你试试看我说的对不对

jinfreaks
jinfreaks 非常感谢!
大约 7 年之前 回复
smiky
smiky http://hi.baidu.com/smiky/item/5ba870c99ec2d2d9ee183ba5看一下最下面那一段你应该应该明白问题出再那了
大约 7 年之前 回复
smiky
smiky 上面说错了,如tear11所说,应该是URLDecoder.decode jsp设置相当于设置jsp转成的java类的javac encode字符集 tomcat的字符集默认为ISO,相当于对接收到的字符串默认以ISO来转化一次,如果你改成UTF-8,那么如果传GBK字符你就要这样转了new String(request.getParameters(param).getBytes("UTF-8"),'GBK')
大约 7 年之前 回复
  1. 看一下自己的页面编码

  2. 尽量用form的post方式提交,后台更转码有风险。

jinfreaks
jinfreaks 非常感谢!
大约 7 年之前 回复
u011379592
King_梦想 提交的时候JS中用了encodeURIComponent(param) ? 这个哪里用到的 ?
大约 7 年之前 回复
jinfreaks
jinfreaks var actionSrc ="........"; form.action = actionSrc; form.method = "post"; form.target = "_self"; form.submit();
大约 7 年之前 回复
u011379592
King_梦想 用form.submit();你这个是怎么提交的呢?
大约 7 年之前 回复
jinfreaks
jinfreaks 就是用的post方式提交的啊
大约 7 年之前 回复

(1)form post提交并不是就没有乱码,而是在过滤器用.setCharacterEncoding("utf-8");可以统一处理;
(2)如果是get请求的参数中带有中文,那就用客户端encodeURIComponent(param) ,然后服务端对应URLDecoder.decode(param,”utf-8”);
(3)环境:有些服务器在服务端会自动执行一次decode,不知道你本机和服务器上web容器是否都是tomcat,server.xml里编码设置是否都是iso-8859-1;
(4)encodeURIComponent(param) 与new String(request.getParameters(param).getBytes("ISO-8859-1"),'UTF-8')配合使用有点不理解;

jinfreaks
jinfreaks 非常感谢!
大约 7 年之前 回复

应该配置一下应用服务的URI编码(应该和页面编码一致)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐