.net asp.net api响应utf-16,java解码乱码

背景:JAVA InputStreamReader 解析String后乱码

一、.net asp.net api响应,返回不同编码

默认请求返回,utf-8

如果请求header增加,Accept-Charset:utf-16, utf-16be, utf-16le;返回utf-16

二、java 解码响应数据出现乱码

java如果根据application/json; charset=utf-16,InputStreamReader 用utf16解码就会出现乱码。

如果用UTF-16BE解码也是乱码。

如果用UTF-16LE解码,可正常解析。

三、UTF-16LE与UTF-16BE区别

Notepad++ HEX-Editor,分析UTF-16LE文件,前2个字节里标记 ff fe

转码为UTF-16BE文件,前2个字节里标记变为 fe ff,7b 00 22 00 变成 00 7b 00 22

UTF-16LE: 最高地址存放高位字节; UTF-16BE: 最低地址存放高位字节。

 四、Wireshark捕获.net asp.net api响应分析

7d 00 22 00 对应响应体{",前后0d 0a 是数据分隔符\r\n;没有utf-16 大端和小端区分。

五、asp.net SystemTextJsonOutputFormatter源码解读

SystemTextJsonOutputFormatter只支持UTF-8、Unicode(UTF-16LE);响应数据格式化时根据Accept-Charset获取是哪种编码方式,匹配不到默认UTF-8。

WebName验证:

六、总结

.net asp.net api响应Content-Type=application/json; charset=utf-16默认UTF-16LE,java解码响应也应该用UTF-16LE。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值