文字コードに関すること 文字コードとは †文字コードとは、コンピュータで文字データを扱うときに使用する、各文字に対して割り当てられた符号(コード)のことである。 例えば「あ」という文字は、明朝体や、ゴシック体など表示する図形の形は複数あっても「あ」という文字の持つ意味は1つである。 文字コードはその規格ごとに、使用する文字の集合と、各文字に割り当てる符号(コード)が決められている。 符号化文字集合と、文字符号化方式 †文字コードとは、符号化文字集合と、文字符号化方式に分けて考えることができる。 符号化文字集合(以下「文字集合」という。)とは、使用する全ての文字の集合を定義し、各文字に符号番号を割り当てたものである。 文字符号化方式とは、文字集合を元にして文字列データを表現するさいに、データ列として、どのように各文字を配置し、符号化するかを決めたものである。 ASCIIのような単純な文字コードを単一で使用するときは、文字集合の各文字を1文字1バイトとして並べただけのものであるが、日本では、ASCII、JISなど、複数の文字集合を混在して使用するために符号位置を計算によりずらしたり、特殊な文字を使用して複数の文字集合を切り替えて使用するなど、様々な方式が使用されている。 ASCII †現在のコンピュータで使われる文字コードのもっとも基本となるコード。7ビット 128文字で構成される。 制御文字(0x00〜0x1f, 0x7f)、空白(0x20)、図形文字(0x21〜0x7e)で構成される。 なぜ、制御文字の0x7f(DEL)だけ離れた位置にあるかというと、データを紙テープで保存していた当時、間違えて穴をあけてしまったときに、その箇所のすべてに穴を開けた状態にすることで(0x7f=1111111) その文字を削除できるようにしたため。 ISO/IEC 646 †ASCIIは、アメリカで使われることを想定して作られたコードであるが、それを国際的に使えるようにISOが制定した規格。各国版のコードを作るための基本的な枠組。 ASCII同様の7bitコードを基本として、その図形文字のうち10文字を各国で自由に決めていいものとした。 ISO/IEC 2022 †ISO(国際標準化機構)と国際電気標準会議(IEC)が定めた、複数の文字集合を切り替えて使用する文字符号化方式。具体的な文字集合については規程されていない。 ISO/IEC 646の枠組みをもとに、8ビットコードと2バイトコードが使用可能となった。 8bitの符号表は、ISO/IEC 646の7bitコードと同じ構造を持つ符号表を2枚使用し、第8bitを0とするCL, GL領域と、第8bitを1とするCR, GR領域を使用する。 符号表の領域に呼び出す文字集合は、あらかじめ4つのバッファ(G0, G1, G2, G3)に指定しておく。G0~G3バッファへの文字集合の指定は、エスケープシーケンスを用いて行う。 この状態から、制御文字を用いて符号表の指定領域へ、指定のバッファを呼び出すことで文字集合を切り替える。(例:SI(シフトイン)でG0の文字集合をGLに呼び出し。) JIS X 0201 †日本工業規格(JIS)の制定している文字コード規格。 ラテン文字集合の、ASCIIからの変更は以下の2点。
カタカナ集合は、いわゆる半角カタカナといわれるもの(規格上は半角幅で表示する必要はない。)。 JIS X 0208 †日本工業規格(JIS)の制定している文字コード規格。 JIS X 0201では表現できない日本語のひらがな/漢字などを収録している。 しかし、一般的に使われる符号化方式(例えばShift_JIS)では、JIS X 0201, JIS X 0208を混在して使用するために、同一の文字にたいして、複数の符号位置が与えられる重複符号化の問題がある。これが俗にいう半角/全角文字の違いである。実際にはJIS X 0201, JIS X 0208ともに文字の幅についての規定はないため、半角/全角という呼び方は不適当であるが、日本では定着した読み方になっており、Unicodeの文字名称にも HALFWIDTH、 FULLWIDTHという名称が使われている。 JIS X 0208 附属書1(規定) シフト符号化表現(いわゆるShift_JISのこと)においては、以下のような記載があります。
ただし、これまでの慣用的な利用との互換を目的としてだけ、これらの文字を使用してもよい。 よってこれから作成するテキストでは、俗にいう全角英数字と、半角カナは使わないことが推奨されます。 機種依存文字 †JIS X 0208の文字コード表には、文字が割り当てられていない区点位置があり(空き領域)に、そこにベンダが独自に文字を定義したもの。 JIS X 0212 †JIS X 0208に足りない文字を補うための2バイト符号化文字集合。主に補助漢字を収録している。JIS X 0208と組み合わせて使用するように設計しているため、JIS X 0208に収録されている文字は含まない。よって文字集合を切り替えられないShift_JISでは使用できない。EUC-JPで使用できるほか、ISO-2022-JPに、JIS X 0212を含めた符号化方式としてISO-2022-JP-1(RFC2237)がある。 JIS X 0213 †JIS X 0208に足りない文字を補うための符号化文字集合。JIS X 0212とは違い、JIS X 0208を拡張するかたちで実装された(JIS X 0208の文字集合を含む。)。 Shift_JIS †現在日本でもっとも使われる文字コード。ISO/IEC 2022には準拠していない。 0x5c問題 †Shift_JISでは、JIS X 0208を2バイトで表現するさいに、2バイト目に ASCIIの\(0x5c)を含むことがある。 2バイト目に\(0x5c)を持つ文字一覧 ― ソ Ы Ⅸ 噂 浬 欺 圭 構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄 兔 喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 偆 砡 纊 犾 ISO-2022-JP †ISO/IEC 2022 準拠の日本語文字符号化方式。7bitコード。俗にいうJISコード。 ISO/IEC 2022の方式に基づき、以下の文字集合を、エスケープシーケンスで切り替えて使用する。ISO-2022-JPでは7bitコードであるためCR, GR領域は使用しない。また使用するバッファはG0バッファのみのため、符号表のGL領域は常にG0バッファを参照している状態で固定されている。よって文字集合の切り替えは G0バッファに対してのみ行われる。
JIS X 0201で使用できるのははラテン文字集合のみで、カタカナは使えないことに注意。(いわゆる半角カナ) EUC-JP (Extended Unix Code) †ISO/IEC 2022 準拠の日本語文字符号化方式。8bitコード。主にUnix系OSで広く使われている。(最近はUnicodeに置き換わっている。)
符号表は、GL領域をG0バッファのASCIIに固定。GR領域は初期状態でG1バッファのJIS X 0208になっています。 JIS X 0201カナは、SS2と組み合わせて2バイトが必要。 JIS X 0212は、SS3と組み合わせて3バイトが必要となります。 Unicode(ISO/IEC 10646, JIS X 0221) †世界中で使われる全ての文字を1つの文字集合で表現することを目標に作られた文字コード。 過去の日本の文字集合(JIS X 0208等)とは互換性がないため、文字コードを相互変換するときは、各文字ごとに対応表を使用しなければいけない。 ハンユニフィケーション †Unicodeでは、世界中の文字を1つの文字集合で表現することを目標に開発された。 字体の微妙に異なる文字を多く統合したため、言語環境によって表示する字体が異なるという問題がある。 UCS-2 †Unicodeの符号化文字集合の1つ。1文字2オクティット(16bit)で表現される。 UCS-4 †Unicodeの符号化文字集合の1つ。1文字4オクティット(32bit)で表現される。 UTF-8 †Unicodeの文字符号化方式の1つ。 ASCIIコードのみを使用した場合、1文字1バイトでUTF-8とASCIIは全く同じコードになる。
日本語のひらがな・漢字などは1文字に3バイトが必要でUTF-16よりもデータ量は大きくなる。 UTF-16 †Unicodeの文字符号化方式の1つ。 現在では、主にコンピュータのメモリ上に配置する内部データ記憶方式として使われている。 サロゲートペア †UCS-2に収まらないUCS-4のデータ範囲(U+10000 - U+10FFFF)を表現するために、UCS-2の上位サロゲート文字(U+D800 - U+DBFF)と下位サロゲート文字(U+DC00 - U+DFFF)を組み合わせて配置し、それぞれのサロゲート範囲に符号を分割して配置する。このサロゲート文字の組み合わせをサロゲートペアという。 当初のUnicodeは、全ての文字集合が2バイト(UCS-2)に収まる予定であったため、UTF-16は1文字2バイトの固定長方式になるはずだったが、後にサロゲートペアが追加された結果、1文字の大きさが可変長の符号化方式となった。また、サロゲートペアを使用してもUCS-4で扱える符号範囲が、U+0000 - U+10FFFF に制限されるため、後にUCS-4のデータ範囲も、同範囲に制限されることになった。 UTF-32 †Unicodeの文字符号化方式の1つ。 |