ๆนๆณ
ๆธ่จ็ด ใฏใฉในใฟ (grapheme cluster) ใฎๅไฝใงๆฐใใใใใใใใจใๅใใ่ช็ถใ ใจๆใๅไฝใงๆๅญใๆฐใใใใจใใงใใใ
Ruby ใงใฎๆนๆณ
- String#scan ใง
\X
ใๆๅฎใใใ\X
ใฏ Unicode ็ตๅๆๅญใทใผใฑใณในใ่กจใใ - String#grapheme_clusters ใ String#each_grapheme_cluster ใไฝฟใใ
ๆฐใใ
'๐จโ๐ฉโ๐ฆโ๐ฆ'.length
#=> 7
'๐จโ๐ฉโ๐ฆโ๐ฆ'.scan(/\X/).length
#=> 1
# String#each_grapheme_cluster ใจ Enumerable#count ใไฝฟใใจ
# ้ไธญใง Array ใชใใธใงใฏใใ็ๆใใใซๆๅญใๆฐใใใใจใใงใใใ
'๐จโ๐ฉโ๐ฆโ๐ฆ'.each_grapheme_cluster.count
#=> 1
ใซใผใใใ
'๐จโ๐ฉโ๐ฆโ๐ฆ'.chars
#=> ["๐จ", "โ", "๐ฉ", "โ", "๐ฆ", "โ", "๐ฆ"]
'๐จโ๐ฉโ๐ฆโ๐ฆ'.grapheme_clusters
#=> ["๐จโ๐ฉโ๐ฆโ๐ฆ"]
'๐จโ๐ฉโ๐ฆโ๐ฆ'.each_char { |chr| puts(format('U+%04X', chr.ord)) }
# U+1F468
# U+200D
# U+1F469
# U+200D
# U+1F466
# U+200D
# U+1F466
'๐จโ๐ฉโ๐ฆโ๐ฆ'.each_grapheme_cluster { |chr| puts(format('U+%04X', chr.ord)) }
# U+1F468