关于Servlet中文编码的一个问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

关于Servlet中文编码的一个问题

request.setCharacterEncoding("UTF-8");

上面这个方法,相信所有用Java编写web应用的时候都会用过。但是你知道这个方法使用上有什么注意事项吗?

你必须让这个方法在所有 getParameter 和 getParameterXxxx 之前调用,如果你的代码有如下行为:

String id = request.getParameter("id");
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");

假设这个name是一个中文参数,那么在IE浏览器下,name值就是乱码,而 FireFox 正常。

我在 Tomcat 和 Resin 下都测试过这个问题,一样的效果。

因此,你必须保证 setCharacterEncoding 在获取参数之前被调用,否则无效。

至于为什么 FireFox 是正常的,而 IE 则不行呢?

你不妨跟踪一下 request.getCharacterEncoding 这个方法的返回值,在 FireFox 下返回 utf-8 ,而IE返回的是 null 。

这个问题也是导致前两天我更新程序时导致乱码的根本原因。

展开
收起
小旋风柴进 2016-02-29 15:38:06 2116 0
1 条回答
写回答
取消 提交回答
  • 小旋风柴进

    最好的办法是在Connector配置中加上URIEncodeing="utf-8"参数

    2019-07-17 18:50:23
    赞同 展开评论 打赏
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载