V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ne6rd
V2EX  ›  问与答

HTTP response 里的 emoji 到底是啥?

  •  
  •   ne6rd · Jan 10, 2024 · 1732 views
    This topic created in 850 days ago, the information mentioned may be changed or developed.

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

    还在找怎么改。
    ne6rd
        4
    ne6rd  
    OP
       Jan 10, 2024
    找到原因了
    旧 API 用的 newtonsoft.json
    新 API 用的 system.text.json, 两者对待 unicode escape 的策略不一样
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3060 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 14:06 · PVG 22:06 · LAX 07:06 · JFK 10:06
    ♥ Do have faith in what you're doing.