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