UTF-8 网址解码/编码

2022-09-04 02:01:36

我指示我的URL发送一个Ajax请求,如下所示:

url += '/' + something + '/' + id;
var response;
$.ajax({
    async : false,
    type: 'DELETE',
    url: url,
 ...

My 是一个包含 UTF-8 字符的变量。我将像这样在Java端处理该变量:removeId

@RequestMapping(value = "/something/{id}", method = RequestMethod.DELETE)
    public void myMethod(HttpServletResponse response, @PathVariable String id) {
    ...

然而,Java端的变量与其原始版本不同,因为UTF-8字符会变成奇怪的东西。id

我如何从JavaScript端发送UTF-8字符,并在我的Java端再次转换它(Spring 3与REST,我的Web服务器是Tomcat 7)?

PS 1:即使我不使用它似乎我的URL正在自行编码?encodeUriComponent

PS 2:为了使问题更清晰:

i.e. my id variable is araç and sent URL is: localhost:8080/sdfasf/ara%C3%A7 

当我看到id变量具有该值时:

araç

而不是:

ara%C3%A7 

Spring(或Tomcat)会自动这样做吗?当涉及到控制器作为路径变量时,有没有办法自动解码它(我的意思是不写任何东西,

URLDecoder.decode(id,"UTF-8");

它将自动转换)


答案 1

您看到的 id 值似乎是使用 iso-8859-1 字符集而不是 utf-8 解码的。url的路径部分的编码在java EE中没有指定,并且没有标准的api来设置它。对于查询参数,您可以在访问任何参数之前使用 request.setCharacterEncoding 来正确解码它们。确实如此,但对路径参数没有影响。CharacterEncodingFilter

要在Tomcat中完成这项工作,您必须将元素的属性设置为“utf-8”。URIEncodingConnectorserver.xml

您想知道的有关java web应用程序中的字符编码的所有信息都可以在类似问题的这个出色答案中找到。


答案 2

我在这里找到了答案:http://forum.springsource.org/showthread.php?14063-How-to-set-setCharacterEncoding-on-Request

我在春季方面进行了该配置:

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

它适用于 UTF-8。


推荐