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