"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/