Перевести 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 и более ранних версиях).

Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

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

P.S. Возможно, это дубликат. Я думаю, что уже писал именно этот ответ, но не могу его найти.

Stefan 06.08.2024 11:16

Другие вопросы по теме