当前位置: 首页 > 面试题库 >

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

韩瀚
2023-03-14
问题内容

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

罗伊


问题答案:

事实证明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>

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

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



 类似资料:
  • 我正在用AJAX向某个服务器发送文件,比如: 代码运行良好,但当我将希伯来文文件名放在头部时,我会得到错误: 错误扫描FileTypeError:无法对“XMLHttpRequest”执行“Set RequestHeAder”:值不是有效的ByteString Header:不起作用。

  • 我正试着导入一个。使用Eclipse Neon 4.6.0将包含希伯来语和英语字符的dat文本文件写入java程序: 出于某种原因,希伯来文字符正被随机胡言乱语所取代: 原版:<码>码>根方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方

  • 问题内容: 您是否知道将Javascript对象编码为可通过请求传递的快速简单的方法? 不,没有其他框架-只是纯Javascript :) 问题答案: 像这样? 编辑:这也将转换递归对象(使用php“ array”表示法作为查询字符串)

  • 当我写这段代码时

  • 问题内容: 说我有一个网址 并且我有一个用户输入的查询,例如: 随机词银行 我希望结果是正确编码的URL: 实现此目标的最佳方法是什么?我尝试创建URI / URL对象,但没有一个是正确的。 问题答案: 应该是要走的路。你只需要记住只对单个查询字符串参数名称和/或值进行编码,而不对整个URL 进行编码,请确保对查询字符串参数分隔符和参数名称-值分隔符都不进行编码。 请注意,查询参数中的空格由+而不