【问题标题】:Convert an escaped unicode String to its chars in ruby 1.8在 ruby​​ 1.8 中将转义的 unicode 字符串转换为其字符
【发布时间】:2010-10-29 19:55:22
【问题描述】:

我必须阅读一些具有以下内容的文本文件:

\u201C涌流十字的小贩夫人\u201D

在 ruby​​ 1.9 终端中,当我创建一个包含此内容的字符串时:

ruby-1.9.1-p378 > "\u2714 \u2714 my great string \u2714 \u2714"
 => "✔ ✔ my great string ✔ ✔" 

在 ruby​​ 1.8 中,我没有将 unicode 代码转换为它们的字符:

ree-1.8.7-2010.01 > "\u2714 \u2714 my great string \u2714 \u2714"
 => "u2714 u2714 my great string u2714 u2714" 

在 Ruby 1.8 中是否有任何简单的方法可以返回正确的字符串字符?

【问题讨论】:

    标签: ruby unicode utf-8


    【解决方案1】:

    对于任何偶然发现这个问题的人(比如我)寻找答案,在 Ruby 1.8 中执行此操作的等效方法是:

    ["2714".to_i(16)].pack("U*")
    

    【讨论】:

      【解决方案2】:

      最简单的方法可能是使用 JSON 解析器,因为 JSON 恰好使用这种格式:

      irb(main):014:0> JSON '["\u2714 \u2714 my great string \u2714 \u2714"]'
      => ["\342\234\224 \342\234\224 my great string \342\234\224 \342\234\224"]
      

      【讨论】:

        【解决方案3】:

        这建立在@Dave 的回答之上。我正在使用以下内容将给定字符串中的所有 Unicode 转义序列替换为相应的字符:

        string_value.gsub(/\\u([0-9a-fA-F]{4})/) {|m| [$1.hex].pack("U")}
        

        这是一个正则表达式,它查找“\u”后跟 4 个十六进制符号。然后它丢弃“\u”,将 4 个十六进制符号转换为整数并使用 pack 获取 Unicode 字符。它用相应的字符替换每个转义序列并返回结果字符串。

        如果您的字符串被进一步转义(例如,将“\”转义为“\\”),将会给您带来麻烦。但在原版的情况下,它应该可以正常工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-09
          • 2011-10-22
          • 1970-01-01
          • 2013-01-30
          相关资源
          最近更新 更多