Postman测试接口时,将postman中的body json数据用微信发送给同事,同事直接复制后到postman中发起请求,结果报错
"JS0N parse error: Invalid UTF-8 start byte 0xa0; nested exception is com.fasterxml.jackson.core.JsonarseException: Invalid UTF-8 startat [Source: (PushbackInputStream): line: 2, column: 3]"
但是在我这是没有问题的,对比了之前的 json 和微信里的 json,几乎没什么区别,研究了很久,才发现问题所在。
相同的json数据在本地postman中及微信消息中的区别(微信消息的空格点少,本地postman的空格点多)


unicode 表示(以{ "a":""}为例)

2个点空格的
\u007b\u00a0\u0020\u00a0\u0020\u0022\u0061\u0022\u003a\u0022\u0022\u007d
4个点空格的
\u007b\u0020\u0020\u0020\u0020\u0022\u0061\u0022\u003a\u0022\u0022\u007d

可以看到,它们的区别在于 { 后面的空格,2个点空格的是 \u00a0 和 \u0020 交替,4个点空格的都是 \u0020。(\u00a0 代表 NBSP,\u0020 代表空格)
在IDEA中也能看出区别

结论:微信消息有时会把json中的两个空格(即\u0020\u0020),转为一个 NBSP 和一个空格(即\u00a0\u0020)
解决方法
- 将postman测试json发送到微信时,最好发送postman的Code snippet 的curl请求代码,这样可以将curl请求直接导入到postman中。(这里的空格不会被转换)
- 如果从微信中复制的json数据,可以用postman进行beautify,这样也可以将json数据转化回来。