V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ne6rd
V2EX  ›  问与答

HTTP response 里的 emoji 到底是啥?

  •  
  •   ne6rd · 347 天前 · 1003 次点击
    这是一个创建于 347 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有新旧两个 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

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

    还在找怎么改。
    ne6rd
        4
    ne6rd  
    OP
       347 天前
    找到原因了
    旧 API 用的 newtonsoft.json
    新 API 用的 system.text.json, 两者对待 unicode escape 的策略不一样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2626 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 07:10 · PVG 15:10 · LAX 23:10 · JFK 02:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.