将utf码转换为字母

问题描述 投票:0回答:1

我正在使用Ruby

我在数据库中有这样的值

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Сервис

是否有可能用红宝石将其转换成普通的波斯字母?一定是这样

13:57:56:سلاماستادمیشهلطفکنیدآموزشکاربااینبرنامهازصفرتاصدروبفرماییدممنونازشماСервис

感谢您的帮助

ruby-on-rails ruby utf-8
1个回答
0
投票

字符串中的Unicode值具有特定的模式:

[u:___;___;___;其中每个___是代表代码点的十六进制值。

您可以使用正则表达式匹配该模式,并通过gsub将编码后的值替换为其各自的Unicode字符:

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Сервис"
© www.soinside.com 2019 - 2024. All rights reserved.