UTF-8 URL解码/编码

我指示我的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端再次转换它(Spring 3 with REST,我的Web服务器是Tomcat 7)?

PS 1:即使我不使用encodeUriComponent ,我的URL似乎是自己编码的?

PS 2:提出更清楚的问题:

 ie 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"); 

它会自动转换)

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

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

所有你想知道的关于java webapp中的字符编码都可以在这个类似问题的优秀答案中找到。

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

我在Spring方面做了那个配置:

  SetCharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter  encoding UTF8   forceEncoding true    SetCharacterEncodingFilter /*  

它适用于UTF-8。

您是否尝试在嵌入javascript的页面上设置页面编码?

  

通过在起始标记下面添加此页面,确保页面编码设置为UTF-8:

  

还要确保使用UTF-8编码保存JavaScript文件。 检查文本编辑器设置。

在JavaScript中使用:

 data=encodeURIComponent(data); 

对于数据编码,您可以在Java中执行以下操作:

 data=java.net.URLDecoder.decode(data); 

无需在javascript端对字符串进行编码。 Java不支持unicode,因此需要在那里进行解码:

output = new String(input.getBytes("ISO-8859-1"), "UTF-8");