文字エンコードについて

文字エンコードが何のことかよくわからいので調べた。
以下Adobeのサイトより引用です。

文字エンコードについて

文字エンコードとは、文字セットに含まれている個々の文字と、コンピュータで表現可能な数値との間のマッピングのことです。 これらの数値はシングルバイトまたはマルチバイトで表すことができます。 たとえば、ASCII エンコードでは、7 ビットを使用してラテンアルファベット、句読点、および制御文字を表します。

日本語のテキストを表すには、Shift-JIS、EUC-JP、ISO-2022-JP などの日本語エンコードを使用します。 これらのエンコードはわずかに異なりますが、いずれの文字セットにも、日本語で使用される約 10,000 個の文字を含む一般的な文字セットが含まれています。

文字エンコードでは、次の用語が使用されます。

SBCS : シングルバイト文字セット。ASCII または ISO 8859-1 などの、1 文字につき 1 バイトでエンコードされる文字セットです。

DBCS : ダブルバイト文字セット。Shift-JIS などの、文字セットを 2 バイト以下でエンコードする方法です。 Shift-JIS などの、2 バイト文字エンコードスキームの多くには、1 バイトでエンコードされる文字と 2 バイトでエンコードされる文字が混在します。一方、UCS-2 などはすべての文字で 2 バイトを使用します。

MBCS : マルチバイト文字セット。文字によって異なる長さのバイト列でエンコードされる文字セットです。UTF-8 などがこれに該当します。

一般的な文字エンコード
ASCII (SBCS) :
英語およびインドネシア語で使用される 7 ビットエンコード。
Latin-1 (SBCS) :
多くの西ヨーロッパ言語で使用される 8 ビットエンコード。
Shift_JIS (DBCS) :
16 ビットの日本語エンコード。
UTF-8 (MBCS) :
マルチバイトの Unicode エンコード。 ほとんどのアジア言語の文字は 3 バイトです。ASCII は 7 ビット、ヨーロッパおよび多くの中東言語で使用される非 ASCII 文字は 2 バイト。

テスト:

len(u’あ’.encode(‘UTF-8′))
Out[152]: 3 (バイト)

関数lenは上のようにunicode型にエンコードすると、バイト数を返してくれます。
‘あ’をUTF-8でエンコードすると、3バイトであることがわかります。

len(u’あ’.encode(‘sjis’))
Out[153]: 2(バイト)

‘あ’をShift_JISでエンコードすると、2バイト(16bit)になっています。

それぞれのエンコードされた結果は

u’あ’.encode(‘UTF-8′)
Out[165]: ‘xe3x81x82′

u’あ’.encode(‘sjis’)
Out[166]: ‘x82xa0′

となっており、確かにUTF-8は3バイト、Shift_JISは2バイトになっています。

<追加>
IT用語辞典より追加
文字コード:
文字や記号をコンピュータで扱うために、文字や記号一つ一つに割り当てられた固有の数字のこと。

欧米などで使われる英数字の文字コードは1バイトで表現されるが、これでは256文字しか表現できず、日本語の漢字などは収録できないため、日本や韓国、中国などではそれぞれ独自に2バイト(最大65536文字)のコード体系を定め、それぞれ自国内で使用している。

1バイトの文字コードとしてはASCIIが世界標準となっているが、一部の大型コンピュータではIBM社のEBCDICを使うものもある。

日本語の文字コードは、JIS(日本工業規格)で標準化されたJISコードの他、主にUNIXなどで使われるEUC、WindowsやMac OSなどで使われるシフトJISの3種類が利用されている。

最近では、世界のほとんどの主要な言語をサポートした2バイトの統一文字コード体系であるUnicodeの規格化が進み、一部で利用が始まっている。

Unicodeはこれまで各国でばらばらに制定されてきた文字コードを統一するものとして期待されているが、普段アルファベットしか使わない欧米の情報技術関連企業を中心に規格化が進んだこともあり、数多くの文字を抱えるアジアの国々からは批判されている。

Unicode:
Apple社、IBM社、Microsoft社など米国の情報関連企業が中心となって提唱し、1993年に国際標準化機構(ISO)でISO/IEC 10646の一部(UCS-2)として標準化された文字コード体系。

すべての文字を16ビット(2バイト)で表現し、1つの文字コード体系で多国語処理を可能にしようとするもの。世界の主要な言語のほとんどの文字を収録している。

2バイト表記では最大65536文字しか収録できないため、中国語・日本語・韓国語で同じ意味や同じルーツの漢字はすべて同じ文字とみなし、同じコードを割り当てる統合作業(ハンユニフィケーションと呼ばれる)が行われ、文化の違いを無視したものだとの反発を招いている。

Unicodeは、最初の規格が策定された後にハングル文字の追加や異体字表現方式の策定が行われ、部分的に3バイト以上を使用する体系に変化している。このため、現在はUnicode全体は4バイトで定義(UCS-4)されている。

UCS 【 Universal multi-octet coded Character Set 】:
ISO/IECによって策定された、符号化された文字集合の国際標準。1993年5年に最初の規格が発行され、現在も改訂、文字の追加がつづいている。世界の主要な言語で使われる文字のほとんどを収録する。31ビット(4バイト)のUCS-4と、その部分集合である16ビット(2バイト)のUCS-2がある。符号化方式としてUTF(UCS Transformation Format)が規定されており、現在よく用いられるのはUTF-8である。

UTF-8:
UCS-2やUCS-4(Unicode)で定義される文字集合を用いて記述された文字列をバイト列(数値の列)に変換する方式の一つ。UTF-8では1文字を1~6バイトの可変長の数値(バイト列)に変換するようになっているが、現在定義されているUnicode文字をUTF-8で表現した場合、最長で4バイトのバイト列に変換される。

UTF-8では、Unicodeの最初の128文字(UCS-2でいうU+0000からU+007F)を変換した結果がASCIIとまったく同じになるため、従来の処理システムとの親和性が高いという特長がある。一方、日本語などの文字は元々2バイトだったものが3バイトや4バイトで表現されてしまうため、UTF-16と比べてデータサイズが大きくなってしまうという欠点がある。

ちなみに、UTF-16ではUCS-4を完全に表現することはできないが、理論上はUTF-8はUCS-4を完全に表現できる。

カテゴリー: 未分類   パーマリンク

コメントは受け付けていません。