文字数はおいくら?(Ruby版)
13
文字数はおいくら? (Ruby版) @tsuda_ahr 2014/4/5 LTDD広島 #2
description
サロゲート文字とか合字とか異体字とかの文字数を取得してみました。
Transcript of 文字数はおいくら?(Ruby版)
![Page 1: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/1.jpg)
文字数はおいくら?(Ruby版)
@tsuda_ahr 2014/4/5 LTDD広島 #2
![Page 2: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/2.jpg)
1.サロゲート文字の場合
puts "𩹉".length
※サロゲート文字とは、文字コードが
U+10000
以上の文字をいいます。(かなり嘘かも)
![Page 3: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/3.jpg)
1.サロゲート文字の場合
こたえ
1
![Page 4: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/4.jpg)
1.サロゲート文字の場合
サロゲート文字でも、
正しく文字数を答える模様。
![Page 5: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/5.jpg)
2.合字の場合
puts "を゙".length
puts "が".length
puts "が".length
![Page 6: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/6.jpg)
2.合字の場合
こたえ
2
2
1
![Page 7: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/7.jpg)
2.合字の場合
合字の構成要素数が文字数として戻る。
![Page 8: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/8.jpg)
3.異体字の場合
puts "辻".length
puts "辻󠄀".length
![Page 9: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/9.jpg)
3.異体字の場合
こたえ
1
2
![Page 10: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/10.jpg)
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 でカウントされる。
![Page 11: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/11.jpg)
5.結論
Ruby 結構優秀!(割と素直)
(というか内部が多分UTF-8)
![Page 12: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/12.jpg)
蛇足) 気にしてほしいこと
String.Length は処理系によって値が異なることがある。
内部はどういうデータで保持しているかを想像してほしい。
入力するユーザー(一般の人)は無慈悲だ。# システムの都合は察してくれない
![Page 13: 文字数はおいくら?(Ruby版)](https://reader035.fdocument.pub/reader035/viewer/2022081403/55660e5ed8b42aa6628b53a7/html5/thumbnails/13.jpg)
おわり
ありがとうございました