当前位置: 首页 > 面试题库 >

JSON编码错误地转义了(Rails 3,Ruby 1.9.2)

司马飞鸿
2023-03-14
问题内容

在我的控制器中,以下作品(打印“oké”)

puts obj.inspect

但这不(提供“ ok \ u00e9”)

render :json => obj

显然,该to_json方法转义了unicode字符。有防止这种情况的选项吗?


问题答案:

如果你挖通了源,你最终会来ActiveSupport::JSON::Encodingescape方法:

def escape(string)
  if string.respond_to?(:force_encoding)
    string = string.encode(::Encoding::UTF_8, :undef => :replace).force_encoding(::Encoding::BINARY)
  end
  json = string.
    gsub(escape_regex) { |s| ESCAPED_CHARS[s] }.
    gsub(/([\xC0-\xDF][\x80-\xBF]|
           [\xE0-\xEF][\x80-\xBF]{2}|
           [\xF0-\xF7][\x80-\xBF]{3})+/nx) { |s|
    s.unpack("U*").pack("n*").unpack("H*")[0].gsub(/.{4}/n, '\\\\u\&')
  }
  json = %("#{json}")
  json.force_encoding(::Encoding::UTF_8) if json.respond_to?(:force_encoding)
  json
end

各种gsub调用都将非ASCII
UTF-8强制为\uXXXX您所看到的符号。十六进制编码的UTF-8应该是处理JSON的任何东西都可以接受的,但是\uXXXX如有必要,您始终可以对JSON(或经过修改的JSON逃逸器中的猴子补丁)进行后处理,以将表示法转换为原始UTF-8。

我同意强制将JSON设为7bit-clean是有点虚假的,但是您就可以了。

简短的回答:不。



 类似资料:
  • 大家好,我正在尝试运行我的第一个ror应用程序,并出现以下错误: 所以我写: 最后: 如你所见,我正在使用windows。Windows 8 32位。 我找到了这个答案:在这里输入链接描述 还有别的办法吗?

  • 我在Windows 7上用俄语运行默认配置的gVim 8.2(因此所有系统文本和菜单项都是俄语)。当我打开包含俄语文本的utf8文件时,由于某种原因,它在cp1251中显示不正确: 手动设置:set encoding=utf8将其修复。 其他与编码相关的选项具有以下值: 我发现vim在这里有助于混淆,因为它似乎无法解释它是如何猜测编码的。出于某种原因,我尝试的其他应用程序(Notepad、Subl

  • 问题内容: 在PHP中,我用于在HTML5数据属性中回显数组。根据JSON的要求-并生成- 用双引号引起来的值。为此,我将数据属性用单引号引起来,例如: 如您所见,最后一个标记(测试的)包含一个单引号,并且不带任何选项的使用会导致解析问题。 因此,我使用该参数,并且解析很好,因为我的单引号已编码,但我想知道:这样做有不利之处吗? 问题答案: 您需要将HTML转义数据回显到HTML:

  • 我尝试使用ruby的上一个版本,但在运行gem install rails时,总是出现错误 我正在使用Windows8。 但宝石列表---本地工作...仅在安装,我的语言环境设置英语。 这是什么样的问题?

  • 我试图将一个JSON请求传递给我的服务器,在那里控制器在将JSON转换为POJO时遇到一个错误。 我不确定代码出了什么问题。我对Spring还是个新手,所以我很感激你的帮助。

  • 问题内容: 我正在尝试通过openssl将.cer文件转换为.pem,命令是: 那就是我得到的错误: 我究竟做错了什么? 问题答案: 我也有这个问题。只需将CER重命名为PEM就足够了:)