ruby - 按字素拆分 Unicode 实体

标签 ruby unicode normalization unicode-normalization grapheme

"d̪".chars.to_a

给我

["d"," ̪"]

我如何让 Ruby 按字素拆分它?

["d̪"]

最佳答案

编辑:作为@michau 的回答说明,Ruby 2.5 引入了grapheme_clusters 方法,如果您只想迭代/枚举而不必创建数组,则还引入了each_grapheme_cluster


在 Ruby 2.0 或更高版本中,您可以使用 str.scan/\X/

> "d̪".scan /\X/
=> ["d̪"]
> "d̪d̪d̪".scan /\X/
=> ["d̪", "d̪", "d̪"]

# Let's get crazy:


> str = 'Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘!͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞'


> str.length
=> 75
> str.scan(/\X/).length
=> 6

如果出于任何原因想要匹配字素边界,可以在正则表达式中使用 (?=\X),例如:

> "d̪".split /(?=\X)/
=> ["d̪"]

ActiveSupport(包含在 Rails 中)如果由于某种原因不能使用 \X 也有办法:

ActiveSupport::Multibyte::Unicode.unpack_graphemes("d̪").map { |codes| codes.pack("U*") }

关于ruby - 按字素拆分 Unicode 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13017888/

相关文章:

ruby-on-rails - 您正在尝试在 heroku-20 上安装 ruby​​-2.6.3

ruby - 在 Ruby block 中使用 'return'

java - 如何在 Android 应用程序中显示韩语单词

user-interface - 我在哪里可以找到这个 unicode 字符?

html - 标准化 <LI> 内部文本和元素符号之间的距离

ruby - 删除空格和等号之间的任何内容

ruby-on-rails - 安装 libapache2-mod-passenger 软件包后是否需要运行 Passenger-install-apache2-module ?

visual-studio-2010 - Mfc 字体绑定(bind)和 Rich Edit 控件 RICHEDIT50W 无法正确显示 Unicode

mysql - 我的表需要更多规范化吗?

mysql - 表结构 - 将一个学生与多个类(class) ID 联系起来