У меня есть строка 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.
Вы можете перевести символы Юникода в их эквиваленты 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.
Также обратите внимание, что в блоке Математические буквенно-цифровые символы есть и другие формы стилизации, которые вы, возможно, захотите перевести соответствующим образом.