Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查询字符串中的字符编码,希伯来语_Java_Servlets_Utf 8_Character Encoding_Servlet Filters - Fatal编程技术网

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

Java 查询字符串中的字符编码,希伯来语,java,servlets,utf-8,character-encoding,servlet-filters,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

我试图用希伯来语发送带有查询字符串参数的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
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>

医学记录
上下文配置位置
类路径:spring/application-config.xml
字符编码滤波器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
符合事实的
字符编码滤波器
/*
org.springframework.web.context.ContextLoaderListener
调度员服务
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/mvc-config.xml
1.
调度员服务
/
-Roy

因为它证明了
字符编码过滤器
使用的

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

这对您没有好处,因为您不是从主体获取参数,而是从查询字符串获取参数

但是,如果您使用的是Tomcat,那么您就很幸运了。Tomcat有一个特殊的
连接器
属性,当设置该属性时(默认为未设置),它将对查询字符串使用相同的字符编码

这一属性是正确的。如果打开Tomcat
servet.xml
文件,您会发现一个元素,如(不带属性)


添加属性,它将按预期工作。在这种情况下,请确保您正在为相应的
连接器
,HTTP设置它


其他Servlet容器可能具有类似的配置。

您从哪里发送此GET请求?它是来自浏览器还是您编写的某个程序?你能改用POST吗?我是从AngularJS资源发送的。我遵循REST原则,所以这篇文章不相关。你们能把你们的CharacterEncodingFilter配置好吗。我遇到了同样的问题,并用它解决了。所以你可能有一些配置错误。@JamesZalame嗯。。。看起来不错。您使用的是什么servlet容器?servlet api 2.5提供了完全相同的问题,但接受的答案对我来说并不适用。查询字符串正在utf-8中编码(与正文相同),但由于某种原因,解码失败。当解除Bugging时,我可以在ApplicationFilterChain旁边看到我的CharacterEncodingFilter。这是正确的顺序吗?但是我没有使用web.xml。我应该打开一个新问题吗?@pakman
CharacterEncodingFilter
解码请求的正文,而不是查询字符串。您设置好连接器了吗?是的,我尝试了useBodyEncodingForURI=“true”和URIEncoding=“UTF-8”(不是同时进行的)。。。什么也没有。我已经尝试了几个Tomcat7版本,包括最新的Tomcat7(7.0.54版)。“这让我发疯了。”帕克曼,我想你应该用相关的细节开始一个新问题。请把它链接到这里,我试着看一下。明白了!我的开发设置相当复杂,需要一个连接到tomcat的ApacheWeb服务器,所以我修改了错误的设置。我正在修改标准http连接器,而不是AJP连接器。它现在可以与URIEncoding=“UTF-8”配合使用。。。非常感谢你的评论,你让我思考。
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
    redirectPort="8443" useBodyEncodingForURI="true">
</Connector>