конвертировать UTF коды в буквы - PullRequest
0 голосов
/ 25 февраля 2020

Я использую Ruby

У меня есть такое значение в базе данных

25.02.2020 13: 57: 56: \ nu: 633; ​​644; 627; 645; и: 627; 633; ​​62а; 627; 62f; и: 645; 6CC; 634; 647; и: 644; 637; 641; и: 6a9; 646; 6CC; 62f; и: 622; 645; 648; 632; 634; и: 6a9; 627; 631; и: 628; 627; и: 627; 6CC; 646; и: 628; 631; 646; 627; 645; 647; и: 627; 632; и: 635; 641; 631; и: 62а; 627; и: 635; 62f; и: 631; 648; и: 628; 641; 631; 645; 627; 6CC; 6CC; 62f; и: 645; 645; 646; 648; 646; и: 627; 632; u: 634; 645; 627; \ n \ n \ nСервис

Возможно ли преобразовать его в обычные персидские буквы с ruby? должно быть так

13: 57: 56: будем благодарны за вашу помощь

1 Ответ

2 голосов
/ 25 февраля 2020

Значения Unicode в вашей строке имеют определенный шаблон c:

u:___;___;___;, где каждое ___ является шестнадцатеричным значением, представляющим кодовую точку.

Вы можете сопоставить этот шаблон используя регулярное выражение, и замените закодированные значения соответствующими символами Unicode с помощью gsub:

str = '25.02.2020 13:57:56:\nu:633;644;627;645; u:627;633;62a;627;62f; u:645;6cc;634;647; u:644;637;641; u:6a9;646;6cc;62f; u:622;645;648;632;634; u:6a9;627;631; u:628;627; u:627;6cc;646; u:628;631;646;627;645;647; u:627;632; u:635;641;631; u:62a;627; u:635;62f; u:631;648; u:628;641;631;645;627;6cc;6cc;62f; u:645;645;646;648;646; u:627;632; u:634;645;627;\n\n\nСервис'

str.gsub(/u:((?:\h+;)+)/) { Regexp.last_match(1).split(';').map(&:hex).pack('U*') }
#=> "25.02.2020 13:57:56:\\nسلام استاد میشه لطف کنید آموزش کار با این برنامه از صفر تا صد رو بفرمایید ممنون از شما\\n\\n\\nСервис"

Шаг за шагом: (для каждого совпадения)

  • совпадение регулярного выражения "u:633;644;627;645;"
  • Regexp.last_match(1) возвращает первую группу захвата "633;644;627;645;"
  • split(';') превращает это в ["633", "644", "627", "645"]
  • map(&:hex) преобразует элементы в [1587, 1604, 1575, 1605]
  • pack('U*') интерпретирует их как кодовые точки Unicode и возвращает "سلام"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...