Eri*_*pir 25 java servlets character-encoding
我正在尝试从请求中读取UTF-8信息.我使用了"request.setCharacterEncoding("UTF-8");",但它似乎什么都不做 - 信息读取是非UTF-8.
我究竟做错了什么?
Mau*_*rry 24
如果您使用的是tomcat,还应该在连接器中将URIEncoding设置为UTF-8:
<Server port="8105" shutdown="SHUTDOWN">
...
<Service name="Catalina">
<Connector port="8180" URIEncoding="UTF-8" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" />
</Engine>
</Service>
</Server>
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 19
在HttpServletRequest#setCharacterEncoding()
当该请求是一个仅具有效果POST
请求和请求正文是不尚未处理.
因此,如果它在您的情况下不起作用,那么它可能有两个原因:
你实际上正在发出GET
请求.即请求参数在请求URL而不是请求主体中从客户端发送到服务器.请求URL由Web服务器处理,而不是由Servlet API处理.因此,要解决此问题,您需要配置相关的Web服务器,以使用指定的字符编码对请求URL(URI)进行解码.例如,在Apache Tomcat的情况下,您需要URIEncoding
将<Connector>
元素的属性设置server.xml
为UTF-8
.
您正在使用POST
,但您已经(间接)处理了请求正文,因此更改字符编码为时已晚.只有在对getParameterXXX()
方法进行第一次调用时,才会完全处理请求正文.有几个.它不会在后续调用中重新处理.当确定谁正在调用此方法时,不要忘记考虑所有声明的Filter
实例web.xml
.其中一些人可能会抓取并扫描参数.
如果这仍然没有任何帮助,那么剩下的唯一可能原因是显示控制台或记录器或者你用来打印/确定/调试获得的请求参数的任何东西都不支持UTF-8.您想重新配置控制台/记录器/ etc以使用UTF-8来显示字符.如果它是例如Eclipse控制台,则可以通过Window> Preferences> General> Workspace> Text File Encoding进行设置.
这种方法真是太愚蠢了.它不应该存在,你不应该使用它.
对于POST请求中的正文,编码应该由Content-Type标头中的客户端明确定义.如果没有,这是一个糟糕的要求.[1]
对于GET请求URI,客户端不能指定编码,并且服务器必须具有隐式编码,并且程序员需要设置编码,但Servlet API中不存在该方法!
但是,你的servlet容器可能有一种专有的方法.
最好的方法可能是将JVM的默认编码设置为UTF-8.
1:http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7.1
"charset"参数与某些媒体类型一起用于定义数据的字符集(第3.4节).当发送方未提供显式字符集参数时,"文本"类型的媒体子类型被定义为在通过HTTP接收时具有默认字符集值"ISO-8859-1".除"ISO-8859-1"或其子集之外的字符集中的数据必须用适当的字符集值标记.
归档时间: |
|
查看次数: |
45728 次 |
最近记录: |