大佬教程收集整理的这篇文章主要介绍了无法获取Servlet以UTF-8格式处理请求内容,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
(要求的最终答案和更正的答案)
您的servlet过滤器应用得太晚了。
可能的适当顺序web.xml
如下
<?xml version="1.0" enCoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBliC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">
<web-app>
<!--CharsetFilter start-->
<filter>
<filter-name>Charset Filter</filter-name>
<filter-class>CharsetFilter</filter-class>
<init-param>
<param-name>requestEnCoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- The rest is ommited -->
我正在将旧版应用程序从ISO-8859-1转换为UTF-8,并且已经使用了许多资源来确定需要设置哪些才能使其正常工作。但是,在进行了几次配置,代码和环境更改之后,我的Servlet(在tomcat
5中)似乎没有将提交的HTML表单内容处理为UTF-8。
这是我为配置设置的内容。
> <%@ page language="java" pageEncoding="UTF-8"
> contentType="text/html;charset=UTF-8" %>
> ...
> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
> public void doFilter(Servletrequest request,ServletResponse response,> FilterChain chain)
> {
> if(request.getCharacterEncoding() == null)
> {
> request.setCharacterEncoding("UTF-8");
> }
> ...
通过一些调试日志,我了解以下内容:
> System.getProperty("file.encoding"): "UTF-8"
> java.nio.charset.Charset.defaultCharset(): "UTF-8"
> new OutputStreamWriter(new ByteArrayOutputStream()).getEncoding():
> "UTF8"
但是,当我使用包含“Битьбаклуши”的输入提交表单时,会看到以下内容(从我的日志中):
> request.getParameter("myParameter") = Ð\221иÑ\202Ñ\214
> баклÑ\203Ñ\210Ð
我知道请求内容类型为null
,因此在我的servlet过滤器中将其明确设置为“
UTF-8”。另外,我正在从一个终端查看我的日志,该终端的编码我也知道也设置为UTF-8。
我在这里想念什么? 我还需要为Servlet设置什么才能将我的输入正确处理为UTF-8?
如果有更多信息会有所帮助,我将很乐意添加更多调试信息并以此来更新此问题。
编辑:
我web.xml
对CharsetFilter的定义太低了(低于我的servlet配置和其他过滤器)。我将过滤器定义移到了web.xml文档的最顶部,一切正常。请参阅下面接受的答案。
以上是大佬教程为你收集整理的无法获取Servlet以UTF-8格式处理请求内容全部内容,希望文章能够帮你解决无法获取Servlet以UTF-8格式处理请求内容所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。