与变音符号有关联的问题。 我根据要求获得说明:
@RequestMapping(value = "/description", method = RequestMethod.POST, consumes = "application/json", produces = "text/plain;charset=UTF-8")
@ResponseBody
private String getDescription() {
return "ärchik";
}
on frontend response.responseText无法为最后一个字母打分 response.responseText =“ärchi”
我发现内容长度错误的问题:7 如果设置Content-Length:8,那么它将起作用并返回完整描述“ärchik”
但我不明白为什么8?
"ärchik".getBytes("UTF-8").length = 7
响应标题
缓存控制:必重新验证
的Content-Length:7
内容类型:文本/无格式;字符集= UTF-8
日期:星期一,2014年4月14日09:08:26 GMT
服务器:Apache-狼/ 1.1
答案 0 :(得分:4)
我正在将评论的核心转化为答案,因为我似乎走在正确的轨道上。
字符串比预期长一个字节的最可能原因是'ä'
被编码为三个字节而不是两个字节。如果不使用预先组合的代码点U + 00E4(UTF-8:c3 a4
)而是使用字母'a'
(U + 0061处的简单ASCII字母)后面跟{{{ 3}} diaresis U + 0308,一起编码为61 cc 88
。有几个combining,较长的编码通常是转换为NFD的结果。
看看你自己的答案,看起来你只是进行了规范化,其中内容长度已经从非规范化(或者可能是NFC规范化的)字符串中确定。
答案 1 :(得分:1)
这是我的错((我正在设计过滤器
//set content-length = 7
chain.doFilter(request, wrappedResponse);
byte[] bytes = wrappedResponse.getByteArray();
String out = new String(bytes, utf8Charset);//7bytes
out = Normalizer.normalize(out , Normalizer.Form.NFD);//8bytes
答案 2 :(得分:0)
spring / tomcat响应是对的。
response.responseText is Ajax response Object?
我猜:js文件编码不是UTF-8;某些功能不适用于javascript的UTF-8。