Ruby:unescape unicode字符串

时间:2012-02-10 15:57:28

标签: ruby string unicode

Unicode字符串:

string = "CEO Frye \u2013 response to Capitalism discussion in Davos: Vote aggressively with your wallet against firms without social conscience."

我尝试过(通过Is this the best way to unescape unicode escape sequences in Ruby?):

def unescape_unicode(s)
   s.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}
end

unescape_unicode(string) #=> CEO Frye \u2013 response to Capitalism discussion in Davos: Vote aggressively with your wallet against firms without social conscience. 

但输出(到文件)仍然与输入相同!任何帮助,将不胜感激。

编辑: 不使用IRB,使用RubyMine,输入是从Twitter解析的,因此单"\u"而不是"\\u"

编辑2: RubyMine IDE Output

1 个答案:

答案 0 :(得分:4)

您是从irb尝试,还是使用p输出字符串?

String#inspect(从irbp str调用)将unicode字符转换为\uxxxx格式,以允许在任何地方打印字符串。此外,当您键入"CEO Frye \u2013 response to..."时,这是由ruby解析器解析的转义序列。它是最终字符串中的unicode字符。

str1 = "a\u2013b"
str1.size #=> 3
str2 = "a\\u2013b"
str2.size #=> 8
unescape_unicode(str2) == str1 #=> true