文字数はおいくら?(ruby版)

13
文字数はおいくら? (Ruby) @tsuda_ahr 2014/4/5 LTDD広島 #2

Upload: tsudaa

Post on 28-May-2015

396 views

Category:

Software


2 download

DESCRIPTION

サロゲート文字とか合字とか異体字とかの文字数を取得してみました。

TRANSCRIPT

Page 1: 文字数はおいくら?(Ruby版)

文字数はおいくら?(Ruby版)

@tsuda_ahr 2014/4/5 LTDD広島 #2

Page 2: 文字数はおいくら?(Ruby版)

1.サロゲート文字の場合

puts "𩹉".length

※サロゲート文字とは、文字コードが

U+10000

以上の文字をいいます。(かなり嘘かも)

Page 3: 文字数はおいくら?(Ruby版)

1.サロゲート文字の場合

こたえ

Page 4: 文字数はおいくら?(Ruby版)

1.サロゲート文字の場合

サロゲート文字でも、

正しく文字数を答える模様。

Page 5: 文字数はおいくら?(Ruby版)

2.合字の場合

puts "を゙".length

puts "が".length

puts "が".length

Page 6: 文字数はおいくら?(Ruby版)

2.合字の場合

こたえ

Page 7: 文字数はおいくら?(Ruby版)

2.合字の場合

合字の構成要素数が文字数として戻る。

Page 8: 文字数はおいくら?(Ruby版)

3.異体字の場合

puts "辻".length

puts "辻󠄀".length

Page 9: 文字数はおいくら?(Ruby版)

3.異体字の場合

こたえ

Page 10: 文字数はおいくら?(Ruby版)

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版)

5.結論

Ruby 結構優秀!(割と素直)

(というか内部が多分UTF-8)

Page 12: 文字数はおいくら?(Ruby版)

蛇足) 気にしてほしいこと

String.Length は処理系によって値が異なることがある。

内部はどういうデータで保持しているかを想像してほしい。

入力するユーザー(一般の人)は無慈悲だ。# システムの都合は察してくれない

Page 13: 文字数はおいくら?(Ruby版)

おわり

ありがとうございました