HttpRequest的参数是Java中的默认编码(Tomcat)

时间:2016-07-27 13:17:17

标签: java tomcat encoding httprequest

我的Tomcat Web服务器正在使用Struts框架(v1)。

当读取请求参数时,我需要将参数从ISO-8859-1重新编码为UTF-8以获得正确的值。 e.g。

String fName = request.getParameter("fName");
String displayName = new String(fName.getBytes("ISO-859-1"), "UTF-8");
persistName(displayName);

问题是为什么默认编码是ISO-8859-1? 它在哪里定义以及如何改变它?

Env详情:

  • 服务器版本:Apache Tomcat / 7.0.62
  • 操作系统名称:Linux
  • JVM版本:1.8.0_92-b14

2 个答案:

答案 0 :(得分:2)

我认为,如果我没记错的话,可以将连接器上的URIEncoding属性设置为默认为UTF-8。

根据this link,Tomcat 8下的默认值(当严格的servlet遵从性关闭时)是UTF-8。在Tomcat 7下,我公司明确地设置了这个。

在连接器元素的server.xml中:

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="443" URIEncoding="UTF-8"/>

根据Tomcat 7 HTTP connector的配置文档,默认为ISO-8859-1。

Tomcat 8 HTTP connector的配置文档明确说明了如果org.apache.catalina。 STRICT_SERVLET_COMPLIANCE为false,将使用UTF-8。

我确实有一些暗示,这可以追溯到Servlet 2.4规范,该规范声明如果没有指定字符编码,则使用ISO-8859-1。

答案 1 :(得分:0)

检查文件的编码是否为utf-8,html中的charset元标记也设置为utf-8。