程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了无法获取Servlet以UTF-8格式处理请求内容大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决无法获取Servlet以UTF-8格式处理请求内容?

开发过程中遇到无法获取Servlet以UTF-8格式处理请求内容的问题如何解决?下面主要结合日常开发的经验,给出你关于无法获取Servlet以UTF-8格式处理请求内容的解决方法建议,希望对你解决无法获取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。

这是我为配置设置的内容。

  • 系统属性
  • JSP文件
>     <%@ page language="java" pageEncoding="UTF-8"
> contentType="text/html;charset=UTF-8" %>
>     ...
>     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  • Servlet过滤器
>     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?
如果有更多信息会有所帮助,我将很乐意添加更多调试信息并以此来更新此问题。

编辑:

  • 我没有使用Windows Terminal(我正在使用PuTTY),@R_196_9447@肯定的是问题不是我正在查看的日志。其次,当我将响应与提交的内容一起发送回浏览器并输出时,它与上面的垃圾相同。
  • 该表格是从IE8提交的。

解:

web.xml对CharsetFilter的定义太低了(低于我的servlet配置和其他过滤器)。我将过滤器定义移到了web.xml文档的最顶部,一切正常。请参阅下面接受的答案。

大佬总结

以上是大佬教程为你收集整理的无法获取Servlet以UTF-8格式处理请求内容全部内容,希望文章能够帮你解决无法获取Servlet以UTF-8格式处理请求内容所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。