インクジェットプリンターのKGK紀州技研工業 
『より詳しい文字コードの話』

ユニコード

JIS、シフトJIS、EUC_JPはいずれも、日本語だけを対象にした文字コードです。 他の言語の文字に対しては互換性がありません。 それに対して「ユニコード」は世界中のあらゆる言語を対象にし、すべての文字を 一つの文字コードで表そうという試みです。 現在、漢字に対しては日本、中国(簡体字、繁体字)の漢字を一つの文字集合に まとめたものが実用化されています。 ユニコードの特徴は以下のとおりです。

  • ユニコードを使えば、一つの文書の中で日本語、中国語を混在させた表現が可能です。
  • 同じような書体の文字は元の文字集合とは関係なく同じコードを割り振られています。 このため、JISコードからユニコードへの変換、その逆の変換はいずれも計算ではできず、 変換テーブルを参照して変換する必要があります。
  • Windows2000、XPとでは内部コードとしてこのユニコードを使用しています。

ユニコードは32ビット(00000000-FFFFFFFF)を使用する膨大な量の文字を指定できる構想ですが、 現在はそのうち16ビット(00000000-0000FFFF)が規定されています。0000を略して、通常は0000-FFFFの16ビットを 指して、「ユニコード」と称しています。

ユニコードに指定されている文字は以下の表のとおりです。

名称 説明 コード
Bacic Latin ラテン文字 0x0020-0x007F
Latin-1 Supplement ラテン文字拡張 0x0080-0x00FF
Latin Extended-A ラテン文字拡張A 0x0100-0x017F
Latin Extended-B ラテン文字拡張B 0x0180-0x024F
IPA Extensions 国際発音記号 0x0250-0x02AF
Spacing Modifier Letters 国際発音記号 長音記号、アクセント記号 0x02B0-0x02FF
Combining Diacritical Marks 国際発音記号 合成用記号 0x0300-0x036F
Greek and Coptic ギリシャ文字 0x0370-0x03FF
Cyrillic キリル文字 0x0400-0x04FF
Cyrillic Supplementary キリル文字 0x0500~0x052F
Armenian アルメニア文字 0x0530-0x058F
Hebrew ヘブライ文字 0x0590-0x05FF
Arabic アラビア文字 0x0600-0x06FF
Syriac シリア文字 0x0700-0x074F
Thaana ターナ文字(モルディブ) 0x0780-0x07BF
Devanagari デーバナーガリ文字 (インド・サンスクリット語、ヒンディー語、マラーティー語、ネパール語) 0x0900-0x097F
Bengali ベンガル文字(インド・ベンガル語) 0x0980-0x09FF
Gurmukhi グルムキー文字(インド・パンジャブ語) 0x0A00-0x0A7F
Gujarati グジャラート文字(インド・グジャラート語) 0x0A80-0x0AFF
Oriya オリヤ文字(インド・オリヤ語) 0x0B00-0x0B7F
Tamil タミル文字(インド・タミル語) 0x0B80-0x0BFF
Telugu テルグ文字(インド・テルグ語) 0x0C00-0x0C7F
Kannada カンナダ文字(インド・カンナダ語) 0x0C80-0x0CFF
Malayalam マラヤラム文字(インド・マラヤラム語) 0x0D00-0x0D7F
Sinhala シンハラ文字(インド・シンハラ語) 0x0D80-0x0DFF
Thai タイ文字 0x0E00-0x0E7F
Lao ラオ文字(ラオス) 0x0E80-0x0EFF
Tibetan チベット文字 0x0F00-0x0FFF
Myanmar ミャンマー文字 0x1000-0x109F
Georgian グルジア文字 0x10A0-0x10FF
Hangul Jamo ハングル字母 0x1100-0x11FF
Ethiopic アムハラ文字(エチオピア) 0x1200-0x137F
Cherokee チェロキー文字(アメリカ先住民) 0x13A0-0x13FF
Unified Canadian Aboriginal Syllabic 統合カナダ先住民音節 0x1400-0x167F
Ogham オーガム文字(アイルランド古代) 0x1680-0x169F
Runic ルーニック文字(イギリス古代) 0x16A0-0x16FF
Tagalog タガログ文字(フィリピン) 0x1700-0x171F
Hanunoo ハノヌオ文字(フィリピン) 0x1720-0x173F
Buhid ブーヒッド文字(フィリピン) 0x1740-0x175f
Tagbanwa タグバンワ文字(フィリピン) 0x1760-0x177F
Khmer クメール文字(カンボジア) 0x1780-0x17FF
Mongolian モンゴル文字 0x1800-0x18AF
Latin Extended Additional ラテン文字拡張追加 0x1E00-0x1EFF
Greek Extended ギリシア文字拡張 0x1F00-0x1FFF
General Punctuation 一般句読点 0x2000-0x206F
Superscripts and Subscripts 上付き・下付き文字 0x2070-0x209F
Currency Symbols 通貨記号 0x20A0-0x20CF
Combining Marks for Symbols 半記号(合成可能) 0x20D0-0x20FF
Letterlike Symbols 文字様記号 0x2100-0x214F
Number Forms 数字に準じるもの 0x2150-0x218F
Arrows 矢印 0x2190-0x21FF
Mathematical Operators 数学記号 0x2200-0x22FF
Miscellaneous Technical その他の技術用記号 0x2300-0x23FF
Control Pictures 制御機能用記号 0x2400-0x243F
Optical Character Recognition 光学的文字認識 0x2440-0x245F
Enclosed Alphanumerics 囲み英数字 0x2460-0x24FF
Box Drawing 罫線素辺 0x2500-0x257F
Block Elements ブロック要素 0x2580-0x259F
Geometric Shapes 幾何学模様 0x25A0-0x25FF
Miscellaneous Symbols その他の記号 0x2600-0x26FF
Dingbats 装飾記号 0x2700-0x27BF
Miscellaneous Mathematical Symbols-A その他の数学記号A 0x27CF-0x27EF
Supplemental Arrows-A 矢印追加A 0x27F0-0x27FF
Braille Patterns 点字図形 0x2800-0x28FF
Supplemental Arrows-B 矢印追加B 0x2900-0x297F
Miscellaneous Mathematical Symbols-B その他の数学記号B 0x2980-0x29FF
Supplemental Mathematical Operators その他の数学記号 0x2A00-0x2AFF
CJK Radicals Supplement CJK部首補助 0x2E80-0x2EFF
Kangxi Radicals 康煕部首 0x2F00-0x2FDF
Ideographic Description Characters 漢字構成記述文字 0x2FF0-0x2FFF
CJK Symbols and Punctuation CJKの記号及び句読点 0x3000-0x303F
Hiragana 平仮名 0x3040-0x309F
Katakana 片仮名 0x30A0-0x30FF
Bopomofo 注音字母 0x3100-0x312F
Hangul Compatibility Jamo ハングル互換字母 0x3130-0x318F
Kanbun 漢文用記号 0x3190-0x319F
Bopomofo Extended 注音字母拡張 0x31A0-0x31BF
Enclosed CJK Letters and Months 囲みCJK文字・月 0x3200-0x32FF
CJK Compatibility CJK互換漢字 0x3300-0x33FF
CJK Unified Ideographs Extension A CJK統合漢字拡張A 0x3400-0x4DBF
CJK Unified Ideographs CJK統合漢字 0x4E00-0x9FAF
Yi Syllables イ文字(中国) 0xA000-0xA48F
Yi Radicals イ文字部首 0xA490-0xA4CF
Hangul Syllables ハングル音節文字 0xAC00-0xD7AF
CJK Compatibility Ideographs CJK互換漢字 0xF900-0xFAFF
Alphabetic Presentation Forms アルファベット表示形A 0xFB00-0xFB4F
Arabic Presentation Forms-A アラビア表示形A 0xFB50-0xFDFF
Combining Half Marks 半記号(合成可能) 0xFE20-0xFE2F
CJK Compatibility Forms CJK互換形 0xFE30-0xFE4F
Small Form Variants 小字形 0xFE50-0xFE6F
Arabic Presentation Forms-B アラビア表示形B 0xFE70-0xFEFF
Halfwidth and Fullwidth Forms 半角・全角形 0xFF00-0xFFEF
Specials 特殊用途文字 0xFFF0-0xFFFF

 

utf-8

実際の文字コードにはユニコードをほぼそのまま使うutf-16と、ASCIIと共存可能な utf-8の二種類が使われています。インターネットではutf-8が使われます。

このエンコードでは下の表のようにビット列を加工し、 ASCIIの文字は1バイトに、漢字(2バイト文字)は3バイトにして表現します。

utf-8のエンコード法
範囲 エンコード前のビット列 エンコード後のビット列
0x0000~0x007F 00000000 0aaaaaaa 0aaaaaaa
0x0080~0x07FF 00000aaa bbbbbbbb 110aaabb 10bbbbbb
0x0800~0xFFFF aaaaaaaa bbbbbbbb 1110aaaa 10aaaabb 10bbbbbb

エンコードされた文字列では、1バイトごとに次のように判別が可能です。

  • 先頭の1ビットが「0」(0x00~0x7F)は1バイト文字または制御コードです。
  • 先頭の2ビットが「10」0x80~0xBF)は2バイトまたは3バイト文字の後続バイトです。
  • 先頭の3ビットが「110」(0xC0~0xDF)は2バイト文字の先頭バイトです。
  • 先頭の4ビットが「1110」(0xE0~0xEF)は3バイト文字の先頭バイトです。