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:
答案 0 :(得分:4)
您是从irb
尝试,还是使用p
输出字符串?
String#inspect
(从irb
和p 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