当前位置: 首页 > 知识库问答 >
问题:

Tomcat的“uriEncoding”、编码Filter和Request.SetCharacterEncoding有什么区别

曹焱
2023-03-14

解决编码问题的方法可能有很多:

>

  • 编码过滤器,如Spring MVC UTF-8编码

    在Tomcat的server.xml中设置uriencoding=utf8,如http://struts.apache.org/release/2.1.x/docs/how-to-support-utf-8-uriencoding-with-tomcat.html。

    @ResponseBody
    @RequestMapping(value="/context/method/{key}",method=RequestMethod.GET,produces = "application/json;charset=utf-8")
    public String method(@PathVariable String key){
    
        logger.info("key="+key+"------------");
    }
    
    public static void main(String args[]) throws UnsupportedEncodingException{
        String key="新浪";
        byte[] bytes=key.getBytes("UTF-8");
        String decode=new String(bytes,"ISO-8859-1");
        System.out.println(decode);
    }
    

    它的输出是相同的“℃°Á-”。所以实际上,路径变量是用ISO-8859-1解码的。

    然后我尝试在web.xml中添加一个过滤器来解决这个问题:

      <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
     </filter>
    
      <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
     </filter-mapping> 
    

    但同样的乱码。

    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
               URIEncoding="UTF-8" useBodyEncodingForURI="true"   ----Here is Added
    />
    

    谢谢!

  • 共有1个答案

    哈扬
    2023-03-14

    >

  • CharacterenCodingFilter配置请求正文的编码。也就是说,它影响post请求参数等的编码,但不影响get参数的编码

    uriencoding用于指定URI的编码,因此它会影响get参数

    usebodyencodingforuri=“true”告诉Tomcat在解码URI时使用为请求正文配置的编码。因此,据我所知,如果设置characterencodingfilterusebodyencodingforuri=“true”,则不需要uriencoding

    >

  • CharacterenCodingFilter用于POST请求

    uriencoding(或usebodyencodingforuri=“true”)用于get请求

  •  类似资料:
    • 我无法理解弹性搜索中的 Bool 筛选器和 And 筛选器之间的区别。 上下文:假设我的文档具有字段:X、Y、Z。 每个字段可以有多个值。 目标: 我想在以下意义上向弹性搜索发送一个查询:(X=value eX1 OR X=value eX2)AND(Y=value eY1 OR Y=value eY2 OR…)AND(Z=value eZ1 OR Z=value eZ2 OR……) 尝试: 我是

    • 本文向大家介绍jQuery中的Grep和Filter有什么区别?,包括了jQuery中的Grep和Filter有什么区别?的使用技巧和注意事项,需要的朋友参考一下 该方法找到一个元素,然后该方法返回匹配特定条件的元素。 jQuery grep函数 示例 该函数用于查找数组的元素。您可以尝试运行以下代码以了解如何使用, jQuery过滤器功能 jQuery方法将返回与特定条件匹配的元素。 示例 您可

    • 问题内容: 我是elasticsearch的新手,在must和filter之间感到困惑。我想在条款之间执行and操作,所以我这样做了 开机自检/ xyz / _search 这给了我所需的结果,既匹配了术语,又使用了像这样的过滤器 开机自检/ xyz / _search 我得到相同的结果,所以什么时候应该使用must以及什么时候应该使用filter?有什么区别? 问题答案: 有助于得分。在中,查询

    • JSON“编码/解码”和JSON“编组/解编”之间有什么区别? 试图学习如何在golang中编写RESTFUL api,但不确定JSON“编码”和“编组”之间的区别是什么,或者它们是否相同?

    • 我将Grails 2.3.11应用程序部署到AppFog(tomcat 6实例),并且tomcat的默认URIEncoding设置为ISO-8859-1(通过GET请求接收到的克罗地亚字符不可用)。在我的例子中,我发现Tomcat服务器中的连接器设置。xml应该配置URIEncoding=“UTF-8”选项(我在docker image上测试了它,它正在使用这个选项)。由于我甚至不确定是否可以在A

    • 发布/xyz/_search 我得到了相同的结果,那么什么时候应该使用must和什么时候应该使用filter呢?有什么区别?