Ruby: unescape unicode string - PullRequest
       2

Ruby: unescape unicode string

4 голосов
/ 10 февраля 2012

Строка Unicode:

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

Я пытался (через Это лучший способ отменить escape-последовательности Unicode в 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 Ответ

4 голосов
/ 10 февраля 2012

Вы пытаетесь сделать это из irb или выводите строку с p?

String#inspect (вызывается из irb и p str), чтобы преобразовать символы Юникода в формат \uxxxx вразрешить печать строки в любом месте.Кроме того, когда вы набираете "CEO Frye \u2013 response to...", это экранированная последовательность, разрешаемая анализатором ruby.Это символ Юникода в последней строке.

str1 = "a\u2013b"
str1.size #=> 3
str2 = "a\\u2013b"
str2.size #=> 8
unescape_unicode(str2) == str1 #=> true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...