最近遇到的一个关于POST请求中文乱码的问题,原本应用是在TOMCAT上运行的,切换到Wildfly8后,测试环境是正常的,但生产环境下客户端发出的相同请求在服务端获取到的中文出现了乱码,在经过定位后发现是Wildfly8的一个配置引起的。
问题分析如下:
在HTTP的POST请求中,如果是这种情况 Content-Type: application/x-www-form-urlencoded;charset=utf-8 ,若没有设置charset=utf-8,这时可能会出现请求参数中文乱码的情况,具体是否会出现还要看Servlet容器的配置,在TOMCAT 中 useBodyEncodingForURI="true" 的话,则Request解析请求body的参数时会用utf-8解码,这时不会出现乱码,如果 useBodyEncodingForURI="false" 的话则会出现中文乱码;在Wildfly中 相同作用的配置在Configuration -> Web -> Servlets -> Common -> Default encoding 如果Default encoding设置为UTF-8则不会出现中文乱码,如果设置为空,则会出现中文乱码,容器默认都是采用ISO 8859-1进行解码,对于用UTF-8编码的POST请求,中文会解码出错,英文及数字等没有影响。
出现中文乱码的配置如图:
设置了默认编解码方式的配置如图:
官方对配置的定义如下: