1

最近我对来自服务器的 JSON 响应中的波兰字符有很大的问题。我对此有简单的 Ajax 请求:

jQuery.ajax( "/GetSimpleRuleList",
    {
        type:"GET",
        responseType:"application/json;charset=utf-8",
        contentType:"application/json;charset=utf-8",
        cache:false
    } ).done( function ( data )
    {
        console.log( data );
        //nevermind here
    } );

并在服务器端适当的控制器:

@RequestMapping(value = "/GetSimpleRuleList", method = RequestMethod.GET)
public
@ResponseBody
String getRuleList( ServletResponse response )
{
    //magically getting my list here
     response.setCharacterEncoding( "UTF-8" );
    return //Using JACKSON ObjectWriter here
}

现在我 100% 确定在服务器端和我从中获取数据的数据库上进行编码是可以的,这没问题。但是当从服务器读取响应时,它是:

???

而不是波兰字符,如:

ąćź

此外,它仅在接收到来自服务器的响应时才会失败,而发送带有数据的请求是正确编码的。

在我的 web.xml 中,我有字符编码过滤器。

有什么帮助吗?我没主意了。

4

3 回答 3

1

尝试将您的响应类型更改为 org.springframework.http.ResponseEntity

public ResponseEntity<String> getRuleList(){
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.add("Content-Type", "application/json; charset=utf-8");
    responseHeaders.setCacheControl("no-cache, max-age=0"); 
    String allyourjson = "yourjsongoeshere";
    return new ResponseEntity<String>(allyourjson, responseHeaders, HttpStatus.OK);
}
于 2013-05-28T10:35:37.367 回答
1

现在我 100% 确定在服务器端和我从中获取数据的数据库上进行编码是可以的

如果您的响应中不存在 Content-Type 标头,请尝试添加它:

response.setHeader("Content-Type", "application/json;charset=UTF-8")

从数据库读取时确保使用 UTF-8 字符集。Jackson 的编码默认为 UTF-8,所以你的数据可能没有使用 UTF-8 编码?!?

从数据库读取时使用什么编码?也许是 ISO-8859-2?

于 2012-09-06T14:50:42.250 回答
0

您可以在控制器类上方使用 spring 注释RequestMapping来接收application/json;utf-8在所有响应中

@Controller
@RequestMapping(produces = {"application/json; charset=UTF-8","*/*;charset=UTF-8"})
public class MyController{
 ...
@RequestMapping(value = "/GetSimpleRuleList", method = RequestMethod.GET)
public
@ResponseBody
String getRuleList( ServletResponse response )
{
    //magically getting my list here
     response.setCharacterEncoding( "UTF-8" );
    return //Using JACKSON ObjectWriter here
}
 ...
}
于 2015-08-04T09:59:24.887 回答