文字コードの部屋 -- エンコードの種類
文字コードの部屋 -- エンコードの種類
お手持ちのブラウザーで、「文字コードの選択」みたいなメニューを選んで見ましょう。ずらーっと出てきます。なんだかたくさんあって、ややこしいですね。
- ISO 646 互換
- [ISO 646] = 7bit
- ISO 646 (アメリカ) -- (いわゆる) ASCII
- ISO 646 (日本語) -- JIS X 0201 ローマ字
- ISO 646 の 8 bit 拡張
- [ISO 8859]
- ISO 8859-1(西欧) -- Latin-1, (いわゆる)欧文フォント
- ISO 8859-2(東欧) -- Latin-2
- JIS X 0201 半角カナ
- PC-9801 ASCII
- [ISO 8859]
- ISO 646 の マルチバイト拡張
- [ISO 2022]
- ISO-2022-JP (日本語) -- (いわゆる) JIS コード
- ISO-2022-CN (中国語)
- ISO-2022-KR (韓国)
- EUC (日本語) -- (いわゆる) EUC コード
- EUC (中国語 簡体字)
- EUC (中国語 繁体字)
- EUC (韓国語)
- MS 漢字コード -- シフト JIS
- NEC 漢字コード -- NEC JIS, PC-98 JIS
- [ISO 2022]
- [ISO 646] = 7bit
- [ISO 10646]
- UCS-2 -- Unicode 1.1
- UCS-4
- UCS-2 + UTF-16 -- Unicode 2.0
- UTF-7
- UTF-8
- UTF-9
- EBCDIC 互換
- EBCDIC
- JEF 漢字コード(富士通)
- KEIS 漢字コード(日立)
ASCII
ASCII (American Standard Code for Information Interchange, 情報交換のためのアメリカ標準コード)
1963年、ASA(American Standard Association)によって定めれられたアメリカ生まれのコードで、未だに強い影響力を持ちます。規格化された当時は 7bit での処理が主流でしたので、7bit 128 文字で構成されています。そのうち、制御文字が 34 文字、印刷可能な文字部分が 0x21〜0x7E 領域の 94 文字です。
\ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
0 | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI |
1 | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2 | SP | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | 〜 | DEL |
制御文字の意味は次のとおりです。
どこに封筒に注意を書くのですか16進 | コード名 | プログラム記法 | 意味 | 英語 |
00 | NUL | \0 | 空白 | NUlL |
01 | SOH | ヘッディング開始 | TC1(Start Of Heading) | |
02 | STX | テキスト開始 | TC2(Start of TeXt) | |
03 | ETX | テキスト終結 | TC3(End of TeXt) | |
04 | EOT | テキスト伝送終了 | TC4(End Of Transmission) | |
05 | ENQ | 問い合わせ | TC5(ENQuiry) | |
06 | ACK | 肯定応答 | TC6(ACKnowledge) | |
07 | BEL | \a | 警告ベル | (BELl) |
08 | BS | \b | 後退 | FE0(Back Space) |
09 | HT | \t | 水平タブ | FE1(Horizontal Tabulation) |
0A | LF | \n | 改行 | FE2(Line Feed) |
0B | VT | \v | 垂直タブ | FE3(Vertical Tabulation) |
0C | FF | \f | 書式送り | FE4(Form Feed) |
0D | CR | \r | 復帰 | FE5(Carriage Return) |
0E | SO | シフトアウト | (Shift Out) | |
0F | SI | シフトイン | (Shift In) | |
10 | DLE | 伝送制御拡張 | TC7(Data Link Escape) | |
11 | DC1 | 装置制御1 | (Device Control 1) | |
12 | DC2 | 装置制御2 | (Device Control 2) | |
13 | DC3 | 装置制御3 | (Device Control 3) | |
14 | DC4 | 装置制御4 | (Device Control 4) | |
15 | NAK | 否定応答 | TC8(Negative AcKnowledge) | |
16 | SYN | 同期信号 | TC9(SYNchronous idle) | |
17 | ETB | 伝送ブロック終結 | TC10(End of Transmission Block) | |
18 | CAN | 取り消し | (CANcel) | |
19 | EM | 媒体終端 | (End of Medium) | |
1A | SUB | 置換キャラクタ | (EOF-End Of File) (SUBstitute character) | |
1B | ESC | 拡張 | (ESCape) | |
1C | FS | ファイル分離キャラクタ(→) | IS4(File Separator) | |
1D | GS | グループ分離キャラクタ(←) | IS3(Group Separator) | |
1E | RS | レコード分離キャラクタ(↑) | IS2(Record Separator) | |
1F | US | ユニット分離キャラクタ(↓) | IS1(Unit Separator) | |
20 | SPC | 間隔・空白 | (SPaCe) | |
7F | DEL | 削除 | (DELete) |
これら、0x01〜0x1B までの制御コードを画面上で表現するため、^A 〜 ^Z、^[ と表記することもあります。
ISO 646
さて、ASCII はアメリカ人にとっては大変都合がよいのですが、コンピュータの世界的普及とともに、他国からその国の独自の文字を使いたいという要望がたくさん出てきました。
これに対応するために、国際規格 ISO 646 で対処することにしました。ISO 646 は、いわば変種 ASCII です。ASCII 中の 94 文字中、83 文字を BCT(Basic Code Table)とし、各国で共通して使用しますが、残りの 12 文字については IRV(International Reference Version) とし、各国が好きな記号を当てはめてよいことになりました。これにより、各国版の ISO 646 が乱立する結果となりました。
誤ったスペルで検索する方法\ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
0 | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI |
1 | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2 | SP | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | 〜 | DEL |
上記の ASCII の表のうち、青い記号計 12 文字を自由に差し替えてよいことになりました。各国が定めた記号を次の表に示します。
国名 | 規格名称 | 0x23 | 0x24 | 0x40 | 0x5B | 0x5C | 0x5D | 0x5E | 0x60 | 0x7B | 0x7C | 0x7D | 0x7E |
アメリカ | US-ASCII | # | $ | @ | [ | \ | ] | ^ | ` | { | | | } | 〜 |
日本 | JIS X 0201 Roman | # | $ | @ | [ | ¥ | ] | ^ | ` | { | | | } |  ̄ |
イギリス | BS 4730 | £ | $ | @ | [ | \ | ] | ^ | ` | { | | | } | 〜 |
フランス | NF Z 62-010-1982 | # | $ | Á | ° | Ç | § | ^ | µ | é | ù | è | ¨ |
ドイツ | DIN 66 003 | # | $ | § | Ä | Ö | Ü | ^ | ` | ä | ö | ü | ß |
スウェーデン | SEN 85 02 00 Annex C | # | ¤ | É | Ä | Ö | Å | Ü | é | ä | ö | å | ü |
スペイン | IBM Spanish | # | $ | · | ¡ | Ñ | Ç | ¿ | ` | ´ | ñ | ç | ¨ |
ISO 8859
ISO 646 で諸外国が満足したかというと、そうではなく、たかだか 12 文字しか入れられない上に、ASCII との文書互換性が失われてしまうので、問題がありました。特に、# や { といった記号が書き換えられてしまうと、C 言語などプログラミングの分野で困ったことになりました。
そこで、ASCII はとりあえずみんな同じものを使うことにし、ASCII で空いていた A0h〜FFh の領域に、各国が望む記号を収録できるようにしたのが ISO 8859 です。ISO 8859-1 〜 ISO 8859-10 までがあります。
キャプティブのサイトは何ですか>- ISO 8859-1 (Latin-1) ラテン文字・西欧
- アイスランド語、アイルランド語、イタリア語、英語、オランダ語、 スウェーデン語、スペイン語、デンマーク語、ドイツ語、ノルウェー語、 ポルトガル語、フィンランド語、フェロー語、フランス語
- ISO 8859-2 (Latin-2) ラテン文字・東欧
- アルバニア語、英語、スロバキア語、スロベニア語、 セルビア・クロアチア語、チェコ語、ドイツ語、ハンガリア語、 ポーランド語、ルーマニア語
- ISO 8859-3 (Latin-3) ラテン文字・エスペラント
- アフリカーンズ語、イタリア語、英語、エスペラント語、 カタルーニヤ語、スペイン語、ドイツ語、トルコ語、マルタ語
- ISO 8859-4 (Latin-4) ラテン文字・北欧
- 英語、エストニア語、グリーンランド語、スウェーデン語、 デンマーク語、ドイツ語、ノルウェー語、フィンランド語、ラップ語、 ラトビア語、リトアニア語
- ISO 8859-5 キリル文字 ロシア語
- ウクライナ語、英語、セルビア語、ブルガリア語、 白ロシア語、マケドニア語、ロシア語
- ISO 8859-6 アラビア文字 アラビア語
- アラビア語、英語
- ISO 8859-7 ギリシア文字 ギリシア語
- ギリシャ語、英語
- ISO 8859-8 ヘブライ文字 ヘブライ語
- ヘブライ語、英語
- ISO 8859-9 (Latin-5) ラテン文字・西欧+トルコ語
- 英語、アイスランド語、トルコ語、イタリア語、オランダ語、 スウェーデン語、スペイン語、デンマーク語、ドイツ語、ノルウェー語、 ポルトガル語、フィンランド語、フェロー語、フランス語
- ISO 8859-10 (Latin-6) ラテン文字 北欧
- 英語、エストニア語、グリーンランド語、スウエーデン語、 アイスランド語、フェロー語、 デンマーク語、ドイツ語、ノルウェー語、フィンランド語、サミ語、 ラトビア語、リトアニア語
ISO 8859-1
ISO 8859 のうち、最もよく使われているのが西欧諸国で用いられる ISO 8859-1 で、特別に Latin-1 と呼びます。
\ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
A | ¡ | ¢ | £ | ¤ | ¥ | ¦ | § | ¨ | © | ª | « | ¬ | | ® | ¯ | |
B | ° | ± | ² | ³ | ´ | µ | ¶ | · | ¸ | ¹ | º | » | ¼ | ½ | ¾ | ¿ |
C | À | Á | Â | Ã | Ä | Å | Æ | Ç | È | É | Ê | Ë | Ì | Í | Î | Ï |
D | Ð | Ñ | Ò | Ó | Ô | Õ | Ö | × | Ø | Ù | Ú | Û | Ü | Ý | Þ | ß |
E | à | á | â | ã | ä | å | æ | ç | è | é | ê | ë | ì | í | î | ï |
F | ð | ñ | ò | ó | ô | õ | ö | ÷ | ø | ù | ú | û | ü | ý | þ | ÿ |
これまでよく使われてきた、SJIS, ISO-2202-JP, EUC-JP について。
コード範囲 +------+------------------+------+------------------+ | 0 1 | 2 3 4 5 6 7 | 8 9 | A B C D E F | +------+------------------+------+------------------+ | | | | | | | | | | | | | | | | | | + Ctr +------------------+------+------------------+ | | | | | | | | | | | | | | | +------+------------------+------+------------------+
シフト JIS
+------+------------------+------+------------------+ | 0 1 | 2 3 4 5 6 7 | 8 9 | A B C D E F | +------+------------------+------+------------------+ | |ASCII | SJIS |JIS X 0201 | SJIS| | | または |1byte | 半角カナ |1byte| | |JIS X0201 ローマ字| 目 | | 目 | + Ctr +------------------+------+------------------+ | | | | | | x | SJIS 2byte 目 | | | | | +------+------------------+------+------------------+
【背景】16bit パソコンの日本語版を作ろうとしたとき、ASCII 文字と日本語を共存させるために、Microsoft 社やアスキー社などが共同開発した文字コードです。Windows95、Dos、Macintosh マシンの内部コードとして使われ、一部のベンダー (HEWLETT PACKARD 社) で UNIX マシンの内部コードとして採用していることもあります。
それまで日本の 8bit マシンで使われていた ASCII 文字と半角カナの領域はそのまま受け継ぎました。日本語は次のような 2 バイトで表現します。まず、1 バイト目には ASCII 文字と半角カナ以外の領域 (81h〜9Fh, E0h〜EAh) を使って区別をつけ、2 バイト目は 40h〜FCh と広く使います。ISO-2022 では禁断の制御領域 (80h〜AFh) をも使っているので、JIS と呼ぶには相応しくないコードです。
- 日本語は 2 bytes、ASCII 文字は 1 byte、半角カナは 1byte とはっきりしています。
- エスケープシーケンスなどの切り替え文字も使いません。
- 旧マシンで使われていた A0h〜DFh の半角カナ領域をそのまま受け継いだのはいいのですが、日本語はそれを避けるように配置されたためコードが分断されています。そのため、補助漢字を入れるスペースが無くなってしまいました。EUC、JIS コードでは定義可能な補助漢字は、シフト JIS には収められていません。
シフト JIS は独自の文字コードながらパソコンの普及により多く利用され、ついに1997年に JIS 規格(X 0208:1997)として取りこまれました。将来的に、シフト JIS から、半角カナが取り除かれるような意向も盛りこまれています。
参考:JIS X 0208 改正案説明資料 より 今回の改正では,この"シフトJIS"に関する規定を新たに規格中に取 り入れることとしたが,その際,"シフトJIS"又は現在の国内での文 字コードの抱える問題点を明らかにし,ユーザにこのような問題点を 回避することのできる情報を与えることを意図して規格化を行った。 (中略) 1992 年の韓国での KS 5601 の改正及び中国で現在開発が行われてい る GBK など,国際規格体系ではなく,シフトJISをもととした体系が 周辺諸国で今後とも広く用いられる可能性が高い。これらの状況から 場合によっては,シフトJISの体系を今後とも利用する必要が出てくる 可能性を考慮し,JIS X 0201で規定される 1 バイト片仮名に関して は,将来削除予定とすることによって,将来の改正において,この1バ イト片仮名の利用を削除することによって,シフトJISの体系を今後と も利用可能とする余地を残すこととした。ただし,この半角片仮名の 利用を削除することによって得られる符号上の空き領域に関しては, 少なくとも5年ないしは10年以上先に,依然としてシフトJISが広く用 いられている場合にのみ,利用を考えるべきであり,符号系の移行に は,十分な時間をとる必要があると考える。
ISO-2022-JP
+------+------------------+------+------------------+ | C0 | GL | C1 | GR | +------+------------------+------+------------------+ | 0 1 | 2 3 4 5 6 7 | 8 9 | A B C D E F | +------+------------------+------+------------------+ | |ASCII | | | | | または | x | x | | |JIS X0201 ローマ字| | | + Ctr +------------------+------+------------------+ | |JIS X 0208-1983 | | | | | または | x | x | | |JIS C 6226-1978 | | | +------+------------------+------+------------------+
【背景】インターネットの前身 JUNET で日本語を含めた電子メールやニュースグループ記事において、ISO 2022 のサブセットとして考案され、以後インターネットの標準エンコードとして用いられています。俗称、JIS コード、JUNET コード。
ISO-2022 は、エスケープシーケンスによって、それ以降の文字を決定します。たとえば、「1B 28 42」の3バイトを宣言すれば、以後、別のエスケープシーケンスが宣言されるまでの間は ASCII 文字の連続だという意味になります。文章の初めは ASCII が設定されているものだと仮定されています。ISO-2022-JP で用いられるエスケープシーケンスは、次の4種です。
2バイト文字へのエスケープシーケンス JIS C 6226-1978(旧JIS) 1B 24 40 [ESC] $ @ JIS X 0208-1983(新JIS83) 1B 24 42 [ESC] $ B 1バイト文字へのエスケープシーケンス JIS X0201-1976 ローマ字 1B 28 4A [ESC] ( J ASCII 1B 28 42 [ESC] ( B例1:「12(1B 24 42)月(1B 28 42)24(1B 24 42)日はクリスマスイブ(1B 28 42)」
上の赤い部分が、埋め込まれたエスケープシーケンスです。
エスケープシーケンスのぶんだけ、EUC、SJIS に比べてファイルサイズが増えます。
ISO-2022-JP では、文章の途中だけを抜き出して、この文字が何であるかを決定できません。エスケープシーケンスの宣言が見つかるまでさかのぼらなくてはなりません。また、任意の行を切り取ると、エスケープシーケンスがついてこないので、下手なエディタでは文字化けが発生してしまいます。せめて 1 行単位で切り取っても弊害がないように、
- 行の始まりは、ASCII で始まる。
- 行の終わり(改行の直前)は、ASCII 文字で終わる
ISO-2022-JP-1
ISO-2022-JP-1 は、JIS X 0212-1990(JIS補助漢字) 1B 24 28 44 [ESC] $ ( Dを追加したものです。実際に普及はしていません。
ISO-2022-JP-2
ISO-2022-JP-2 は、多言語が扱えるように、エスケープシーケンスを大量に追加しました。実際に普及はしていません。
ISO-2022-JP-3
ISO-2022-JP-3 は、いわゆる JIS 2000 (JIS 第 3 水準、JIS 第 4 水準)が使えるように拡張されました。
EUC-JP
EUC (Extended Unix Code)
+------+------------------+------+------------------+ | C0 | GL | C1 | GR | +------+------------------+------+------------------+ | 0 1 | 2 3 4 5 6 7 | 8 9 | A B C D E F | +------+------------------+------+------------------+ | | | | 【JIS 漢字】 | | |ASCII | |JIS X 0208-1990 or| | | または | x |JIS X 0208-1983 or| | |JIS X0201 ローマ字| |JIS C 6226-1978 | + Ctr +------------------+------+------------------+ | | | |JIS X 0201 | | | | | x | 半角カナ | | | | | | | | + +------------------+------+------------------+ | | | | 【補助漢字】 | | | | x | JIS X 0212-1990 | | | | | | +------+------------------+------+------------------+
【背景】UNIX マシンの標準コードです。日本語環境の UNIX システムで、1バイトである ASCII 文字と、2バイトの日本語を共存させるために考え出されました。JIS コードをちょっと特殊に独自改良してあります。日本語版のほかに、各国語版 EUC がたくさん作られて、やはり UNIX システムで使われています。
表からもわかるように、GR には 3 種の文字コードがマッピングされていますが、普段は JIS X 0208 が指定されています。半角カナや補助漢字を使いたい時は、シングルシフトと呼ばれるコントロールコードを、1文字ごとに頭に付けます。そのため、半角カナは、SS2(8Eh) + コード(A1h〜DFh) の 2 バイト表現となり、補助漢字は SS3(8Fh) + コード(A1h〜FEh) の 3 バイト表現となります。
Extended BCD Interchange Code. (BCD, binary coded decimals)
IBM 社が、1964 年に発表した規格。自社メインフレームの標準コードとして普及し、以後汎用コンピュータの内部コードとして定着しました。
ASCII が 7bit に対し、EBCDIC は 8bit です。ASCII と違い、配置が不連続なのが特徴です。数字が F0h 〜 F9h に配置されているのは、「ゾーン 10 進数」の影響でしょうか?当時の様子を知らないのでわかりません。
EBCDIK
EBCDIC に拡張を施し、カタカナを使えるようにしたもの。富士通と日立で、微妙に異なる。
NEC 漢字コード
+------+------------------+------+------------------+ | 0 1 | 2 3 4 5 6 7 | 8 9 | A B C D E F | +------+------------------+------+------------------+ | | | 罫線 | JIS X 0201 |罫線 | | | ASCII | ・ | 半角カナ | ・ | | | | 記号 | |記号 | + Ctr +------------------+------+------------------+ | | | | | | | JIS C 6226-1978 | x | x | | | | | | +------+------------------+------+------------------+
【背景】PC-9801 以前、BASIC 等で用いられていたらしいです。パソコン通信で広く普及したものと思われます。NEC-JIS。
ISO-2022-JP がモデルになっていますが、1byte 文字は 00h〜FFh をフル利用します。前半 (00h〜7Fh) が ASCII、後半 (80h〜FFh) には半角カナ・罫線・トランプの記号などの独自記号を配置してあります。2byte 文字は、ISO-2022-JP を基準としていますが、独自のエスケープシーケンス (KI コード 1B4Bh / KO コード 1B48h) で、漢字・非漢字を切り替えています。
手元の MS-DOS ver 5.0 ハンドブックを見ると、FILECONV という NEC 製の外部コマンドがあり、N88-日本語BASIC(86)ファイルと MS-DOS ファイルとの変換をするとの記述があります。おそらくこれが、NEC 漢字コード / シフト JIS コンバータなのでしょう。
TRON コード
国産の国際多言語コード。
TRON コードは、16 bit の文字コード面を 4 つの領域に分け、1面で 48,400 文字を扱います。複数の面を扱うことができますが、面の切り替えのために特殊なシーケンスが必要になります。世界で初めて、各国 13 万文字を扱える製品が出荷されました。
ISO 2022 よりは考えられているが、似たりよったりである。Unicode よりダメ。
0 comments:
Post a Comment