一尘不染

UTF-8 URL解码/编码

tomcat

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

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

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

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

但是id,Java端的变量与其原始变量有所不同,因为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)会自动做到吗?当涉及到控制器作为路径变量时,是否有任何方法可以自动对其进行解码(我的意思是不写任何内容,例如:

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

它将自动转换)


阅读 363

收藏
2020-06-16

共1个答案

一尘不染

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

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

2020-06-16