Перевести Unicode в ASCII в Ruby

У меня есть строка Unicode, и мне нужно перевести ее в чистый ASCII.

t = "\xf0\x9d\x97\x94\xf0\x9d\x98\x82\xf0\x9d\x97\xb4\xf0\x9d\x98\x82\xf0\x9d\x98\x80\xf0\x9d\x98\x81"

Моя первая попытка оказалась неудачной:

t.encode('ASCII', invalid: :replace, undef: :replace, replace: '')
=> ""

Перевел строку с использованием нормализации Юникода:

t.unicode_normalize :nfkd
=> "August"

Есть ли лучшее решение? Он должен быть независимым от драгоценных камней и работать с Ruby 2.x (String#unicode_normalize недоступен в 2.1 и более ранних версиях).

🤔 А знаете ли вы, что...
Ruby позволяет создавать графические интерфейсы с помощью библиотеки Ruby-GNOME.


56
1

Ответ:

Решено

Вы можете перевести символы Юникода в их эквиваленты ASCII с помощью tr:

t.tr("𝗔-𝗭𝗮-𝘇", 'A-Za-z')
#=> "August"

или, используя их коды:

t.tr("\u{1D5D4}-\u{1D5ED}\u{1D5EE}-\u{1D607}", "A-Za-z")
#=> "August"

Убедитесь, что t имеет кодировку UTF-8.

Также обратите внимание, что в блоке Математические буквенно-цифровые символы есть и другие формы стилизации, которые вы, возможно, захотите перевести соответствующим образом.