HTTP response 里的 emoji 到底是啥?

258 天前
 ne6rd

有新旧两个 API ,返回同样的数据,从数据库读取的。 旧 API 用 postman 测试,无论用 pretty/raw 模式查看 response ,都是显示 emoji 的图标。 新 API 在 pretty 模式查看,显示的是 emoji ,用 raw 模式查看,显示的是 unicode 字符串 "\uD83D\uDC14"

新旧 API 用 VS DEBUGGER 看也是 emoji

为啥会造成这种区别?

检查了 response header 都是 application/json;charset=utf-8

937 次点击
所在节点    问与答
4 条回复
javalaw2010
258 天前
就 OP 描述的内容来看,我认为这种现象取决于服务在 json 序列化的时候是否启用了 utf8 编码,比如 php 的 json_encode 函数就接受一个`JSON_UNESCAPED_UNICODE`选项,不编码 utf8 字符。至于你在调试软件里面看到的是什么,取决于这个调试软件会不会对 json 自动转义。
lovelylain
258 天前
json 的 string 是支持\uxxxx 这样的 unicode 转义的,有的 json 库在序列化的时候会输出原值,有的会输出转义,例如 python 自带的 json 库,dumps 函数默认 ensure_acsii=True ,所有非 ascii 字符都会被转义。
ne6rd
258 天前
好像确实是 json 序列化的问题。
语言是 c# .netcore6
如果返回 plain text 就都是 emoji
如果返回 json 就有 unicode

还在找怎么改。
ne6rd
257 天前
找到原因了
旧 API 用的 newtonsoft.json
新 API 用的 system.text.json, 两者对待 unicode escape 的策略不一样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1007427

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX