文字数はおいくら?(ruby版)
DESCRIPTION
サロゲート文字とか合字とか異体字とかの文字数を取得してみました。TRANSCRIPT
文字数はおいくら?(Ruby版)
@tsuda_ahr 2014/4/5 LTDD広島 #2
1.サロゲート文字の場合
puts "𩹉".length
※サロゲート文字とは、文字コードが
U+10000
以上の文字をいいます。(かなり嘘かも)
1.サロゲート文字の場合
こたえ
1
1.サロゲート文字の場合
サロゲート文字でも、
正しく文字数を答える模様。
2.合字の場合
puts "を゙".length
puts "が".length
puts "が".length
2.合字の場合
こたえ
2
2
1
2.合字の場合
合字の構成要素数が文字数として戻る。
3.異体字の場合
puts "辻".length
puts "辻󠄀".length
3.異体字の場合
こたえ
1
2
4.C#だとこんな感じ
Ruby C#
サロゲート 𩹉(U+29E49)
1 2
合字
を゙(U+3092 U+3099)
2 2
が(U+304B U+3099)
2 2
が(U+304C)
1 1
異体字辻
(U+8FBB)1 1
辻󠄀(U+8FBB U+E0100)
2 3
内部がUTF-16なので、サロゲート領域(U+10000以上)
の文字は 2 でカウントされる。
5.結論
Ruby 結構優秀!(割と素直)
(というか内部が多分UTF-8)
蛇足) 気にしてほしいこと
String.Length は処理系によって値が異なることがある。
内部はどういうデータで保持しているかを想像してほしい。
入力するユーザー(一般の人)は無慈悲だ。# システムの都合は察してくれない
おわり
ありがとうございました