回答
使用來自unicode.gem的Unicode::text_elements
,其記錄在http://www.yoshidam.net/unicode.txt。
irb(main):001:0> require 'unicode'
=> true
irb(main):006:0> s = "abčd̪é"
=> "abčd̪é"
irb(main):007:0> s.chars.to_a
=> ["a", "b", "č", "d", "̪", "é"]
irb(main):009:0> Unicode.nfc(s).chars.to_a
=> ["a", "b", "č", "d", "̪", "é"]
irb(main):010:0> Unicode.nfd(s).chars.to_a
=> ["a", "b", "c", "̌", "d", "̪", "e", "́"]
irb(main):017:0> Unicode.text_elements(s)
=> ["a", "b", "č", "d̪", "é"]
我不知道爲什麼你的代碼不給Unicode代碼點,因爲Ruby的新版本使用each_char
或chars
時總是給Unicode代碼點,但你可以隨時使用:
"d̪".codepoints.to_a
這是爲unicode。
#=>「[100,815]」 – Reactormonk
@Tass好吧,它可能是您的Ruby或操作系統支持的問題。看看這個:http://stackoverflow.com/questions/5560914/how-do-i-escape-a-unicode-string-with-ruby你可能不得不手動打包每個2字節到一個如答案中所示。 – texasbruce
我剛剛設置了操作系統編碼爲'UTF8','default_ {internal,external}'也設置爲'UTF8'。 'unpack('U *')'也給我兩個字節。 – Reactormonk
Ruby2.0
str = "d̪"
char = str[/\p{M}/]
other = str[/\w/]
在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*") }
- 1. 分割ascii/unicode字符串
- 2. 的Unicode字形不窗體
- 3. 用unicode分隔符分割字符串?
- 4. Pypy的Unicode字符串分割
- 5. 爲使用Unicode字符分割分割功能
- 6. 分割元素由字符
- 7. 分割由多個字符
- 8. 由{}分割字符串&[]
- 9. 如何從圖像中分割實際的人體形狀?
- 10. 由分割
- 11. 分割字符串由分隔符
- 12. PHP字符串分割由分隔符
- 13. 由分隔符分割字符串
- 14. 分割字符串由N個字符
- 15. Java - 由大數分割的小數字
- 16. 命名實體識別中實體的分割
- 17. PHP分割字符串的n-gram的Unicode字符問題
- 18. Python:用字典中的實體替換某些Unicode實體
- 19. 由unicode類別拆分字符串
- 20. 實體分割與代碼只
- 21. 分割MVC EditorFor爲實體列表
- 22. 由第三個實例分割字符串?
- 23. Java Unicode字體
- 24. CSS unicode字體
- 25. 實體框架代碼優先:實體分割
- 26. Unicode字符或編碼實體
- 27. 如何將Unicode字符映射到字體中的字形?
- 28. 由換行符分割字符串trouble
- 29. 由字符或空格python分割行
- 30. 分割字符串由從XML
你想在字形拆分? – Joey