查询字符串中的字符编码,希伯来语

Jam*_*ame 4 java servlets utf-8 character-encoding servlet-filters

我正在尝试使用希伯来语中的查询字符串参数发送GET请求.当控制器获得请求时,参数是乱码.我添加了"org.springframework.web.filter.CharacterEncodingFilter",但它没有改变一件事.

请告知如何解决它.

更新:这是请求.

GET /myapp/specialties?query=%D7%92%D7%99%D7%A0%D7%A0%D7%A0%D7%A0 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Accept: *
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like           Gecko) Chrome/33.0.1750.117 Safari/537.36
Content-Type: application/json;charsert=utf-8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,he;q=0.6
Query String Parametersview sourceview URL encoded
query:??????
Response Headersview source
Content-Type:application/json;charset=UTF-8
Date:Mon, 03 Mar 2014 20:45:17 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
Run Code Online (Sandbox Code Playgroud)

web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">

    <display-name>med.rec</display-name>


    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/application-config.xml</param-value>
    </context-param>

    <filter>
        <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/mvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
Run Code Online (Sandbox Code Playgroud)

-Roy

Sot*_*lis 6

事实证明HttpServletRequest#setCharacterEncoding(String)哪些CharacterEncodingFilter用途

覆盖此请求正文中使用的字符编码的名称.必须在读取请求参数或使用getReader()读取输入之前调用此方法.否则,它没有任何效果.

这对你没有好处,因为你没有从正文中获取参数,而是从查询字符串中获取参数.

但是,如果您使用的是Tomcat,那么您很幸运.Tomcat有一个特殊Connector属性,当设置(默认情况下未设置)时,将对查询字符串使用相同的字符编码.

那个属性是useBodyEncodingForURI.如果你打开你的Tomcat servet.xml文件,你会发现一个像(没有属性)的元素

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
    redirectPort="8443" useBodyEncodingForURI="true">
</Connector>
Run Code Online (Sandbox Code Playgroud)

添加属性,它将按预期工作.Connector在这种情况下,请确保为适当的HTTP 设置它.

其他Servlet容器可能有一些类似的配置.