gpt4 book ai didi

ruby - iconv 以后会弃用,音译

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:07 26 4
gpt4 key购买 nike

ruby 1.9.3 警告 iconv 弃用,但我使用 iconv 删除变音符号以从

Iconv.iconv('asccii//translit', 'utf-8', 'Těžiště') 

返回 Teziste。我如何使用 String.encode 获得它?

最佳答案

如果我有 Rails(或只是 ActiveSupport),我会做这样的事情:

ActiveSupport::Multibyte::Unicode.normalize('Těžiště', :kd).chars.grep(/\p{^Mn}/).join('')

获取'Teziste' . :kd本质上 decomposes您的重音字符分为单独的重音和字符,然后是 \p{^Mn}从字符流中删除所有非间距标记,当您将它们与 join 一起放回原位时, 你会得到无重音的字符串。

如果您手边没有 Rails 或 ActiveSupport,那么您可以使用 UnicodeUtils.compatibility_decomposition 来自 unicode-utils而不是 ActiveSupport::Multibyte::Unicode.normalize :

> UnicodeUtils.compatibility_decomposition('Těžiště').chars.grep(/\p{^Mn}/).join('')
=> "Teziste"

我倾向于将 ActiveSupport 版本修补到 String在 Rails 领域:

def de_accent
#
# `\p{Mn}` is also known as `\p{Nonspacing_Mark}` but only the short
# and cryptic form is documented.
#
ActiveSupport::Multibyte::Unicode.normalize(self, :kd).chars.grep(/\p{^Mn}/).join('')
end

所以我可以这样说:

> s = 'Těžiště'.de_accent
=> "Teziste"

去掉重音。

这种方法不能处理所有事情,但也许足够了。

关于ruby - iconv 以后会弃用,音译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20224915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com