Ruby hexacode для преобразования в юникод - PullRequest
1 голос
/ 17 марта 2011

Я сканировал веб-сайт, который содержит Unicode, и результаты выглядят примерно так:\ uc5d0 "

Могу ли я узнать, как мне сделать это в Ruby, чтобы преобразовать его обратно в исходный текст Unicode в формате UTF-8?

Ответы [ 4 ]

1 голос
/ 17 марта 2011

Если ваша ОС по какой-либо причине дает вам эти буквенные символы ascii , мой предыдущий ответ, очевидно, неверен, не обращайте на него внимания. : P

вот что вы можете сделать:

a.gsub(/\\u([a-z0-9]+)/){|p| [$1.to_i(16)].pack("U")}

при этом будет сканироваться строка ascii '\ u', за которой следует шестнадцатеричное число, и она заменяется правильным символом Юникода.

1 голос
/ 17 марта 2011

короткий ответ: вы должны быть в состоянии «поставить» и увидеть распечатанную строку.для меня, по крайней мере, я могу распечатать эту строку как в 1.8.7, так и в 1.9.2

длинный ответ: Первое: это зависит от того, используете ли вы ruby ​​1.8.7 или 1.9.2, поскольку способ обработки строк и кодировок изменился.

в 1.8.7: строки - это просто списки байтов.Когда вы распечатываете их, если ваша ОС справится с этим, вы можете просто «положить», и это должно работать правильно.если вы сделаете [0], вы получите первый байт .если вы хотите получить каждый символ, все чертовски сложно.

в строках 1.9.2 - это списки байтов с кодировкой.Если веб-страница была отправлена ​​с правильной кодировкой, ваша строка уже должна быть правильно закодирована.если нет, вам придется установить его (согласно ответу Майка Льюиса).если вы сделаете [0], вы получите первый символ (сердце).если вы хотите каждый байт, вы можете сделать a.bytes.

1 голос
/ 17 марта 2011

Если у вас есть ruby ​​1.9, вы можете попробовать:

a.force_encoding('UTF-8')

В противном случае, если у вас <1.9, я бы рекомендовал прочитать <a href="http://po-ru.com/diary/fixing-invalid-utf-8-in-ruby-revisited/" rel="nofollow"> эту статью о переходе на UTF-8 в Ruby1.8.

0 голосов
/ 17 марта 2011

Вы также можете указать кодировку при открытии нового объекта IO: http://www.ruby -doc.org / core / classes / IO.html # M000889

По сравнению сРешение Майка, это может предотвратить проблемы, если вы забудете принудительно закодировать код перед тем, как открыть строку для остальной части вашего приложения, если есть несколько механизмов для получения строк из вашего модуля или класса.Однако, если вы начнете сканировать сайты, закодированные в SJIS или KOI-8, решение Майка будет легче адаптировать к имени кодировки символов, возвращаемому веб-сервером в его заголовках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...