SlideShare a Scribd company logo
1 of 33
Download to read offline
テキストファイルを読む💪


第1回
30分後には、生のテキストファイルが
読めるようになっているはず。知らんけど。
Unicode
世界中の全ての文字を集めて
番号を振るプロジェクト
今では世界的なスタンダード
文字コードの業界規格 by Wikipedia
Unicodeにおいて各文字に振られている番号を、
コードポイントと呼ぶ
「A」のコードポイントは65 (= 0x41)
「a」のコードポイントは97 (= 0x61)
「あ」のコードポイントは12354 (= 0x3042)
Unicodeでは、16進数表記を用いて
「A」はU+0041, 「a」はU+0061, 「あ」はU+3042
と表される
1980年代
当時の構想
Unicodeは16ビット固定長にしよう!
それぞれの文字に対して、
0x0000〜0xffffまでの番号を振る
(2^16 = 65,536個の文字を登録できる)
1991年10月
Unicode 1.0.0 制定
収録文字数は7,161
1992年6月
Unicode 1.0.1 制定
CJK統合漢字を導入
収録文字数は28,359
1990年代後半
16bitでは全然足りなかった


こうなることは割と以前から分かっていたらしい。
UTF-16 FAQ | What is UTF-16? とかに書いてあります
足りなくなったら足せばいい...?
もう16bitベースで開発が進んでいた
例: JavaのChar型
今更「1文字16bit」を変更することは不可能
でも16bitでは足りない
🤔🤔🤔
💡
2文字で1文字にしよう!
サロゲートペア
2文字分のデータを使って1文字を表す
UTF-16のみで用いられている
上位サロゲート: U+D800〜U+DBFF (1024通り)
下位サロゲート: U+DC00 〜 U+DFFF (1024通り)
上位サロゲート1024通りと下位サロゲート1024通りの
組み合わせで、
1024*1024 = 1,048,576通りの文字が表現できる
サロゲートペアの仕組み
32bit (16bit+16bit) で1つの文字を表現
U+29E3D (𩸽): U+D867 U+DE3D
変換式は部誌を見れば分かるはず (多分)
(次回やるかも)
これにより、Unicodeで表現できる文字数が大幅に増加
65,536 + 1,048,576 - 2,048 = 1,112,064
サロゲートペアの一例
これを用いてU+010000 〜 U+10FFFFまでが表される
合計でU+0000〜U+10FFFFまで全てを表現するには
1,114,112通り必要であるが、サロゲート領域の2,048を除くことで
1,112,064通りとなる
現在のUnicodeコードポイントの全てを表現するには、
21bit (= 2,097,152) あれば十分
=> UTF-8の話で詳しく
サロゲートペアはUTF-16の話
文字符号化方式 (所謂文字エンコーディング)の1つ
UTF-16
(Unicode Transformation Format 16)
文字符号化方式
文字集合 (Unicodeなど) -> バイト列
Unicodeに対応する文字符号化方式
UTF-8, UTF-16, UTF-32など
Unicodeに対応しない文字符号化方式
Shift_JIS, EUC-JPなど
UTF-8
1コードユニットは8bit
コードユニット1つ〜4つでUnicodeコードポイント1つ
に対応する可変長符号方式
コードユニット
日本語Wikipediaだと符号単位と訳されている
サロゲートペアとは、UTF-16コードユニット2つで
Unicodeコードポイント1つを表現するもの
UTF-32
1コードユニットは32bit
コードユニット1つでUnicodeコードポイント1つに
対応する固定長符号方式
UTF-16
1コードユニットは16bit
コードユニット1つまたは2つでUnicodeコードポイント
1つに対応する可変長符号方式
Unicodeコードポイントとの対応
UTF-8
1コードポイントを8bit〜32bit使って表していて、
ややこしい
対応表があるので見ながらやりましょう
対応表 by Wikipedia
UTF-16
基本的には、Unicodeコードポイントが16bitの
バイト列で保存されている。
サロゲート領域 (U+D800 〜 U+DFFF) が出てきたら、
サロゲートペアだな!と頭を切り替えられればOK
UTF-32
Unicodeコードポイントが21bitで十分表現可能である
のに対し、1コードユニットは32bit。
コードポイントが32bitのバイト列としてそのまま保存
されているので、特に考えるべきことはなく、
そのまま読めば良い
実際に読んでみる
アルファベットのみ
ひらがなのみ
UTF-8
アルファベットのみ
ひらがなのみ
UTF-16
アルファベットのみ
ひらがなのみ
UTF-32 (BE)
UTF-16 BE
U+FEFFはByte order mark
UTF-32 BE
U+FEFFはByte order mark
第1回 完
(次回も色々読む予定; 時期は未定)

More Related Content

More from 京大 マイコンクラブ

C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?京大 マイコンクラブ
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜京大 マイコンクラブ
 
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会京大 マイコンクラブ
 
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」京大 マイコンクラブ
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編京大 マイコンクラブ
 
Google Photosにネットで拾ったイラストを溜め込む
Google Photosにネットで拾ったイラストを溜め込むGoogle Photosにネットで拾ったイラストを溜め込む
Google Photosにネットで拾ったイラストを溜め込む京大 マイコンクラブ
 
オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話京大 マイコンクラブ
 

More from 京大 マイコンクラブ (20)

Pietで競プロしよう
Pietで競プロしようPietで競プロしよう
Pietで競プロしよう
 
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったらもし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
 
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
 
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
 
Altseed
AltseedAltseed
Altseed
 
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
 
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
 
C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回
 
C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回
 
C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回
 
文字コード基礎論A
文字コード基礎論A文字コード基礎論A
文字コード基礎論A
 
Ultra piet
Ultra pietUltra piet
Ultra piet
 
Google Photosにネットで拾ったイラストを溜め込む
Google Photosにネットで拾ったイラストを溜め込むGoogle Photosにネットで拾ったイラストを溜め込む
Google Photosにネットで拾ったイラストを溜め込む
 
CUI3D
CUI3DCUI3D
CUI3D
 
オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話
 

テキストファイルを読む💪 第1回