Text
Page: 1
文字コード略歴
よこやままさふみ
社内勉強会
2012/05/18
文字コード略歴
Powered by Rabbit 2.0.6
Page: 2
自己紹介
✓ 横山昌史
✓ 入社4年目
✓ プログラマ etc...
✓ 所属プロジェクト
✓ Java、UNIX、雑用 etc...
✓ 文字コードの "るつぼ"
文字コード略歴
Powered by Rabbit 2.0.6
Page: 3
Rabbitについて
✓ プレゼンテーションツール
✓ 実装: Ruby/GTK
✓ 動作: UNIX/Win/Mac
✓ 文章とデザインの分離
✓ バージョン管理しやすい
文字コード略歴
Powered by Rabbit 2.0.6
Page: 4
文字コードとは
✓ 文字をコンピュータで扱うための
符号化方式
✓ エンコード、キャラクターセットとも
呼ばれる
文字コード略歴
Powered by Rabbit 2.0.6
Page: 5
符号化
✓ 文字や音声などを0と1のデジタ
ルデータに変換すること
✓ 16進数で記述されることが多い
✓ Javaなどでは、頭に"0x"を付けると16
進数として扱われる
文字コード略歴
Powered by Rabbit 2.0.6
Page: 6
よく使われる文字コード
✓ ASCII
✓ Shift_JIS
✓ UTF-8(Unicode)
✓ EBCDIC
文字コード略歴
Powered by Rabbit 2.0.6
Page: 7
ASCII
文字コード略歴
Powered by Rabbit 2.0.6
Page: 8
ASCII
American
Standard
Code for
Information
Interchange
文字コード略歴
Powered by Rabbit 2.0.6
Page: 9
ASCII
✓ 英語を表現するための文字コード
✓ 英字アルファベット、記号
✓ いわゆる半角文字
文字コード略歴
Powered by Rabbit 2.0.6
Page: 10
ASCII
✓ 1文字につき7ビットの1バイトコ
ード
7
✓ 7ビット = 2 = 128
✓ 16進数で言うと0x00〜0x7Fまで
✓ 1バイト = 8ビットのため、1ビット余り
文字コード略歴
Powered by Rabbit 2.0.6
Page: 11
ASCIIの例
✓ Heisei 24
✓ 48 65 69 73 65 69 20 32 34
✓ 16進数(0xは省略)
文字コード略歴
Powered by Rabbit 2.0.6
Page: 12
JIS X 0201
✓ 日本工業規格
✓ 一部の符号位置がASCIIと違う
✓ 半角カナが使える
✓ 8ビット目を拡張
文字コード略歴
Powered by Rabbit 2.0.6
Page: 13
ASCIIと異なる文字
✓ 符号位置0x5C
✓ ASCII:半角バックスラッシュ
✓ JISX0201:半角円記号
文字コード略歴
Powered by Rabbit 2.0.6
Page: 14
ASCIIと異なる文字
✓ 符号位置0x7E
✓ ASCII:半角チルダ
✓ JISX0201:半角オーバーライン
文字コード略歴
Powered by Rabbit 2.0.6
Page: 15
ASCIIと異なる文字
✓ ASCIIかJISX0201かは曖昧
✓ 環境によって表示が変わる
✓ 日本のフォントは円記号
✓ 外国のフォントはバックスラッシュ
✓ 7Eは日本でも大抵チルダ
文字コード略歴
Powered by Rabbit 2.0.6
Page: 16
Shift_JIS
文字コード略歴
Powered by Rabbit 2.0.6
Page: 17
Q & A
✓ Q.あなたの母語は何語ですか?
✓ A.日本語
✓ Q.日本語は英字アルファベットだ
けで表現できますか?
✓ A.いいえ
文字コード略歴
Powered by Rabbit 2.0.6
Page: 18
ひらがなや漢字が必要
✓ 常用漢字 2,136文字(2010年
改定)
8
✓ 1バイト = 8ビット = 2 = 256
✓ 1バイトでは表現できない
文字コード略歴
Powered by Rabbit 2.0.6
Page: 19
2バイトコード
✓ 1文字を2バイトで符号化
16
✓ 2バイト = 16ビット = 2 =
65,536
文字コード略歴
Powered by Rabbit 2.0.6
Page: 20
JIS X 0208
✓ 日本工業規格
✓ JIS第1・第2水準漢字を定義
✓ 最新版では6,879文字を収録
✓ 1983年に大幅な変更
✓ 異字体の符号位置入れ替え
✓ 字形の変更
文字コード略歴
Powered by Rabbit 2.0.6
Page: 21
JIS X 0213
✓ 日本工業規格
✓ JIS X 0208の拡張(後方互換)
✓ JIS第3・第4水準漢字を定義
✓ 環境によってはJISX0213に対応
していない(JIS第3・第4水準漢字
が使えない)
文字コード略歴
Powered by Rabbit 2.0.6
Page: 22
Shift_JISの成り立ち
JIS X 0201
+
JIS X 0208(JIS X 0213)
文字コード略歴
Powered by Rabbit 2.0.6
Page: 23
Shift_JISの特徴
✓ 日本語が表現できる
✓ 半角カナが使える
✓ JISX0201との互換性
文字コード略歴
Powered by Rabbit 2.0.6
Page: 24
Shift_JISの例
✓ 平成 24
✓ 95 BD 90 AC 20 32 34
文字コード略歴
Powered by Rabbit 2.0.6
Page: 25
Shift_JISの欠点
✓ 全角半角問題
✓ 「A」と「A」、「ア」と「ア」など
✓ 全角文字を扱える文字コード共通の問
題
✓ JISX0201の副作用
✓ だめ文字
文字コード略歴
Powered by Rabbit 2.0.6
Page: 26
Shift_JISの派生
✓ WindowsではShift_JISを拡張し
た文字コードが使われている
✓ Windows31-JやMS932やCP932な
どと呼ばれる
✓ 重複符号化(㈱問題)
✓ 同じ文字に複数の符号位置
文字コード略歴
Powered by Rabbit 2.0.6
Page: 27
UTF-8
文字コード略歴
Powered by Rabbit 2.0.6
Page: 28
Q & A
✓ Q.今はどんな時代ですか?
✓ A.国際化時代
✓ Q.Shift_JISの欠点はどこですか?
✓ A.日本語しか扱えない
文字コード略歴
Powered by Rabbit 2.0.6
Page: 29
Unicode
✓ 世界中の言語を表現できる文字
コードの仕様がUnicode
✓ 110,181文字(2012年1月)
文字コード略歴
Powered by Rabbit 2.0.6
Page: 30
Unicode
✓ Unicodeの実装の一つがUTF-8
✓ 他にもUTF-16など
文字コード略歴
Powered by Rabbit 2.0.6
Page: 31
UTF-8の特徴
✓ ASCIIを拡張
✓ Shift_JISとは違い、JISX0201の拡張
ではない
✓ 半角カナなどの符号位置がShift_JISと
違う
✓ だめ文字がない
文字コード略歴
Powered by Rabbit 2.0.6
Page: 32
1文字のバイト数
✓ ASCII
✓ 全て半角文字 = 全て1バイト
✓ Shift_JIS
✓ 半角 = 1バイト
✓ 全角 = 2バイト
文字コード略歴
Powered by Rabbit 2.0.6
Page: 33
1文字のバイト数
✓ UTF-8
✓ 半角 = 主に1バイト
✓ 全角 = 日本語は3バイト
✓ 記号は3バイトか2バイト
文字コード略歴
Powered by Rabbit 2.0.6
Page: 34
UTF-8の例
✓ 平成 24
✓ E5 89 B3 E6 88 90 20 32 34
文字コード略歴
Powered by Rabbit 2.0.6
Page: 35
1バイトでない半角文字
✓ \(半角)が2種類
✓ 5C (ASCII): 規格上はバックスラッシュ
✓ C2 A5 (UTF-8): 規格上は円記号
✓ 2バイトの半角文字
文字コード略歴
Powered by Rabbit 2.0.6
Page: 36
1バイトでない半角文字
✓ ~(半角)も2種類
✓ 7E (ASCII): 規格上はチルダ
✓ E2 80 BE (UTF-8): 規格上はオーバ
ーライン
✓ 3バイトの半角文字
文字コード略歴
Powered by Rabbit 2.0.6
Page: 37
半角カナ
✓ ア (半角)
✓ B1 (Shift_JIS)
✓ EF BD B1 (UTF-8)
✓ UTF-8の半角カナは全て3バイト
✓ 単純なバイト数チェックでは、半角
か全角か判別できない
文字コード略歴
Powered by Rabbit 2.0.6
Page: 38
IBM版とMS版
✓ IBM-Unicode(一般的な
Unicode)とMS-Unicode(マイ
クロソフト版Unicode)で符号位
置が異なる文字がある
✓ いわゆる波ダッシュ問題の要因
文字コード略歴
Powered by Rabbit 2.0.6
Page: 39
波ダッシュ問題
✓ Windowsとそれ以外のOS間で
の通信時などに文字化け
✓ 対象文字は10文字程度(環境に
よる)
✓ 〜 — - ‖ ∥ ¦ ¬ ¢ £
文字コード略歴
Powered by Rabbit 2.0.6
Page: 40
EBCDIC
文字コード略歴
Powered by Rabbit 2.0.6
Page: 41
EBCDIC
✓ IBMによって定義された文字コー
ド
✓ IBM製のメインフレーム(汎用機)など
で現在も使用されている
文字コード略歴
Powered by Rabbit 2.0.6
Page: 42
EBCDIC
✓ 半角文字の符号位置がASCIIと
異なる
✓ 全角文字の表現方法がShift_JIS
やUTF-8と異なる
✓ 基本的にJIS第3・第4水準は含ま
れない
文字コード略歴
Powered by Rabbit 2.0.6
Page: 43
半角文字
✓ すべて1バイト
✓ 8ビット目まで使用
✓ 制御文字エリアが大きい
✓ 0x00〜0x3Fと0xFF
✓ 汎用機で使用される特殊な制御文字
が含まれている
文字コード略歴
Powered by Rabbit 2.0.6
Page: 44
全角文字
✓ 半角文字との区別は制御文字で
行う
✓ 全角の開始位置がシフトアウト(0x0E)
✓ 全角の終了位置がシフトイン(0x0F)
✓ 略してSO/SIなどと呼ばれる
文字コード略歴
Powered by Rabbit 2.0.6
Page: 45
SO/SI
✓ 平成 24
✓ 0E 45 8D 45 BA 0F 40 F2 F4
文字コード略歴
Powered by Rabbit 2.0.6
Page: 46
うわっ…
✓ SIの欠如
✓ 0E 45 8D 45 BA
✓ SO/SIのネスト
✓ 0E 45 8D 0E 45 BA 0F 0F
✓ SO/SIを対として扱うのではなく、
モード切替文字として扱うことで
対応
文字コード略歴
Powered by Rabbit 2.0.6
Page: 47
まとめ
文字コード略歴
Powered by Rabbit 2.0.6
Page: 48
参考
✓ プログラマのための文字コード技
術入門
✓ 正規表現クックブック(66ページ)
✓ AIX 5L 日本語コード一覧表
✓ jp_codebookで検索
ご静聴ありがとうございました。
文字コード略歴
Powered by Rabbit 2.0.6