Monday, March 5, 2012

文字コードの部屋 -- エンコードの種類

文字コードの部屋 -- エンコードの種類

文字コードの部屋 -- エンコードの種類 ミケネコ研究所 / 文字コードの部屋 / エンコードの種類

お手持ちのブラウザーで、「文字コードの選択」みたいなメニューを選んで見ましょう。ずらーっと出てきます。なんだかたくさんあって、ややこしいですね。

  • 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 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 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 文字です。

0123 4567 89AB CDEF
0 NULSOHSTXETX EOTENQACKBEL BSHTLFVT FFCRSOSI
1 DLEDC1DC2DC3 DC4NAKSYNETB CANEMSUBESC FSGSRSUS
2 SP!"# $%&' ()*+ ,-./
3 0123 4567 89:; <=>?
4 @ABC DEFG HIJK LMNO
5 PQRS TUVW XYZ[ ]^_
6 `abc defg hijk lmno
7 pqrs tuvw xyz{ |}DEL

制御文字の意味は次のとおりです。


どこに封筒に注意を書くのですか
16進コード名プログラム記法意味英語
00NUL\0空白NUlL
01SOHヘッディング開始 TC1(Start Of Heading)
02STXテキスト開始 TC2(Start of TeXt)
03ETX テキスト終結 TC3(End of TeXt)
04EOT テキスト伝送終了 TC4(End Of Transmission)
05ENQ 問い合わせ TC5(ENQuiry)
06ACK 肯定応答 TC6(ACKnowledge)
07BEL\a 警告ベル (BELl)
08BS\b 後退 FE0(Back Space)
09HT\t 水平タブ FE1(Horizontal Tabulation)
0ALF\n 改行 FE2(Line Feed)
0BVT\v 垂直タブ FE3(Vertical Tabulation)
0CFF\f 書式送り FE4(Form Feed)
0DCR\r 復帰 FE5(Carriage Return)
0ESO シフトアウト (Shift Out)
0FSI シフトイン (Shift In)
10DLE 伝送制御拡張 TC7(Data Link Escape)
11DC1 装置制御1 (Device Control 1)
12DC2 装置制御2 (Device Control 2)
13DC3 装置制御3 (Device Control 3)
14DC4 装置制御4 (Device Control 4)
15NAK 否定応答 TC8(Negative AcKnowledge)
16SYN 同期信号 TC9(SYNchronous idle)
17ETB 伝送ブロック終結 TC10(End of Transmission Block)
18CAN 取り消し (CANcel)
19EM 媒体終端 (End of Medium)
1ASUB 置換キャラクタ (EOF-End Of File) (SUBstitute character)
1BESC 拡張 (ESCape)
1CFS ファイル分離キャラクタ(→) IS4(File Separator)
1DGS グループ分離キャラクタ(←) IS3(Group Separator)
1ERS レコード分離キャラクタ(↑) IS2(Record Separator)
1FUS ユニット分離キャラクタ(↓) IS1(Unit Separator)
20SPC 間隔・空白 (SPaCe)
7FDEL 削除 (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 が乱立する結果となりました。


誤ったスペルで検索する方法
0123 4567 89AB CDEF
0 NULSOHSTXETX EOTENQACKBEL BSHTLFVT FFCRSOSI
1 DLEDC1DC2DC3 DC4NAKSYNETB CANEMSUBESC FSGSRSUS
2 SP!"# $%&' ()*+ ,-./
3 0123 4567 89:; <=>?
4 @ABC DEFG HIJK LMNO
5 PQRS TUVW XYZ[ ]^_
6 `abc defg hijk lmno
7 pqrs tuvw xyz{ |}DEL

上記の ASCII の表のうち、青い記号計 12 文字を自由に差し替えてよいことになりました。各国が定めた記号を次の表に示します。

国名 規格名称 0x230x240x400x5B 0x5C0x5D0x5E0x60 0x7B0x7C0x7D0x7E
アメリカ 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 と呼びます。

0123 4567 89AB CDEF
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 よりダメ。



These are our most popular posts:

タバコ - Wikipedia

... の一年草である。タバコ属には約50の種が含まれるが、大規模に栽培されるものは N. tabacum と N. rustica(en) の2種に限られる。 .... タバコ自体は15世紀にアメリカ 大陸からヨーロッパに伝えられたものであるが、それ以前からスペインでは薬草類を tabacoと呼んでいた。しばしばアメリカ・ .... 上記の欠点は改善されている。 煙草の ケース ... read more

スペイン語の読み方: 基本編

しかしながらスペイン語に関しては, 本来非常に素直に, ほぼ原則どおりローマ字読み すればよいものを, 英語読みなどに毒された ... スペイン語の人名, 地名などの固有名詞 や, 普通名詞でも日本語文中で外来語として使われることのあるものを対象とする。 ..... スペイン語の y- の音 (硬口蓋摩擦音) は日本語のヤ行音 (硬口蓋接近音) よりも摩擦が 強いので, 語頭や -n の後など, 現れる ... 困難であるので, ll-, y- の両者には, 方針1と 上記の理由により, 最も多くの地域で使われている標準的な音としてヤ行音を一律に あてた。 read more

スペイン語入門

現在でも歌える歌はあるのですが、発音はいい加減だし、意味もほとんど 分からずに 歌っているので、何だかちょっと ... スペイン語の表記には「n」の上に「~」(ティルデ)を 書いた「エーニェ」 や各母音の上に「´」(アクセント)を付けものなどがあります ..... 過去 分詞は、 -ar、-er、-ir 型により、上記のように、語幹に -ado 又は -ido を付加して生成し ます。 read more

日本語 - Wikipedia

なお、五十音図は、音韻体系の説明に使われることがしばしばあるが、上記の日本語 モーラ表と比べてみると、少なからず異なる部分がある。五十音図の成立は平安時代に さかのぼるものであり、現代語の音韻体系を反映するものではないことに注意が必要で ある(「 .... 基本的に「か行」は [k]、「さ行」は [s]([θ] を用いる地方・話者もある)、「た行」は [t]、「な行」は [n]、「は行」は [h]、「ま行」は [m]、「や ..... なお、「状況語」という用語は ロシア語・スペイン語・中国語(中国語では「状語」と言う)などにもあるが、日本語の「 状況語」と ... read more

Related Posts



0 comments:

Post a Comment