ObjectMapper.writeValueAsString方法序列化字符串的默认编码是什么?
ObjectMapper.writeValueAsString 默认编码说明
首先得理清两个容易混淆的概念:Java String 本身的内部编码,以及序列化生成的JSON内容的字符编码规则。
writeValueAsString返回的是JavaString对象,而Java语言规范里,String内部统一采用UTF-16编码存储字符,这和Jackson无关,是Java本身的特性。- 但从序列化生成的JSON内容的编码逻辑来看,你的推测是对的:Jackson默认会按照UTF-8规则处理JSON字符:
- ASCII范围内的字符会直接输出;
- 非ASCII字符默认会转义为
\uXXXX的Unicode转义序列(你也可以通过配置JsonGenerator.Feature.ESCAPE_NON_ASCII关闭转义,直接输出对应字符,此时只要把返回的String用UTF-8编码转成字节流,就能得到标准的UTF-8格式JSON)。
简单来说:如果你把writeValueAsString返回的字符串用UTF-8编码转为字节数组,得到的就是符合标准的UTF-8格式JSON;而方法返回的String对象本身的内部编码是UTF-16,这是Java的固有属性,不由Jackson决定。
内容的提问来源于stack exchange,提问作者John Cooper
相关产品推荐
相关产品推荐

