代码之家  ›  专栏  ›  技术社区  ›  Antzi

从Rails将4字节UTF-8字符编码为JSON会产生无效字符

  •  5
  • Antzi  · 技术社区  · 10 年前

    我有一个rails(3.2.19)中的web服务,它编码一个JSON,供一些iOS或Android应用程序读取。 json可能包含任何字符,但每次我使用4字节的UTF8字符(例如 💩 :改为生产 \uf4a9 又称作  .

    在rails控制台中,角色是 正确地 显示,但当我使用AFNetworking或HTTParty在iOS中检索答案时,它失败了。

    以下是我的代码示例,用于检索错误的JSON:

    puts HTTParty.post( 'http://0.0.0.0:3000/login',
    :body => { :login => 'antoine',
               :password => 'thisisnotmypassword',
             }.to_json,
    :headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json' })
    

    要对JSON进行编码:

    format.json { render json: json_reponse } #json_response is a Hash.
    

    发送其他UTF-8字符效果很好,例如: ضصيتحضصتحخـ

    3 回复  |  直到 2 年前
        1
  •  4
  •   Aaron Brager    10 年前

    您的web服务对JSON编码错误。看起来您没有使用标准的JSON编码器,因为 as of Rails 3.2.13, the Unicode characters are passed through (就是说,你不应该看到 任何 \u1234 -类型编码。)

    也就是说,如果您想保持旧编码,请尝试从 object.to_json JSON.generate(object, :ascii_only => true). (更多详情请参见第1段中的链接。)

        2
  •  3
  •   Antzi    10 年前

    最后,我使用了

    JSON::dump(obj))

        3
  •  0
  •   Ariel Cabib    6 年前

    Oj也可以完成以下工作:

    Oj.dump(obj, mode: :compat)
    

    您必须添加 oj 它在你的宝石清单上