我指示我的URL发送这样的Ajax请求:

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

我的removeId是一个包含UTF-8字符的变量。我将像这样在Java端处理该变量:
@RequestMapping(value = "/something/{id}", method = RequestMethod.DELETE)
    public void myMethod(HttpServletResponse response, @PathVariable String id) {
    ...

但是,Java端的id变量与其原始变量有所不同,因为UTF-8字符变为奇怪的东西。

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

PS 1:即使我不使用encodeUriComponent,似乎我的URL本身也在编码?

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)会自动做到吗?有什么方法可以将 Controller 作为路径变量自动解码(我的意思是无需编写类似以下内容的代码:
URLDecoder.decode(id,"UTF-8");

它将自动转换)

最佳答案

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

为了使它在Tomcat中工作,您必须将其URIEncodingConnector元素的server.xml属性设置为“utf-8”。

您可以在this excellent answer中找到有关Java Webapp中字符编码的所有信息,以解决类似的问题。

10-04 15:57
查看更多