Unicode

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Unicode(ユニコード)とはコンピュータ上で多言語文字を単一の文字コードで取り扱うために1980年代に提唱された文字コードである。

ゼロックス社が提唱し、マイクロソフトアップルIBMサン・マイクロシステムズヒューレット・パッカードジャストシステムなどが参加するユニコードコンソーシアムにより作られ、1993年ISOでもISO/IEC 10646の一部として標準化された。

目次

[編集] 概要

Unicodeは世界で使われる全ての文字を共通の符号化文字集合にて利用できるようにしようということで作られ、NT系Microsoft WindowsMac OS XLinuxJava言語などでの内部コードとして利用されている。

元々16ビットの文字集合<ref>現在、BMPで規定されている領域のみの文字集合。この文字集合の範囲は、ISO/IEC 10646におけるUCS-2で定義される範囲と同一。</ref>で全ての文字の網羅を目指して開発されたが、コードポイントが圧倒的に足りず、現在では21ビットの文字集合<ref>ISO/IEC 10646におけるUCS-4は31ビットの文字集合であり、これとは別物。</ref>として規定されている。

収録されている文字は、各国で標準として規定されている文字セットを持ち寄り、委員会により取捨選択されている。日本の文字については当初よりJIS X 0201JIS X 0208JIS X 0212を、Unicode 3.1ではJIS X 0213の内容を収録している。

また収録においては同じ意味・目的の文字は、できる限り同じコードポイントに割り当てる方針を取っている。そのため、CJK統合漢字(中国語、日本語、韓国語で使用される漢字が統合された領域)は大きな議論となった。各国のコードはISO/IEC 10646とは別の組織で標準化されているため、厳密には違うものであるが、互いに非互換が生じないように慎重に標準化が進められている。

既存の符号化方式との相互運用性もある程度考慮されており、同じグリフ(字形)の文字であっても、歴史上・実用上の識別が求められる場合には互換領域がとられ、Unicodeを介在して文字コード変換を行った際に、復元可能となるように考慮されている。しかしながら、他の符号化文字集合(文字符号化方式)との変換の整合性においては、いくつかの問題がある<ref>例えば、CP51932eucJP-MSのように既存文字コード同士でUnicodeとの対応が一部違う場合には文字化けが発生する等がある。</ref>。

[編集] 文字集合

Unicodeに収録されている文字については、#一覧の「コード順分類一覧」を参照。

[編集] エンコーディング(符号化方式)

ISO/IECの規格が定めている符号化方式については、ISO/IEC 10646#文字集合のサブセットおよびISO/IEC 10646#文字符号化方式を参照

UTF-7
UTF-16 (後述) で表したUnicodeをBase64で変換して表す方式。ただし、ASCIIのアルファベット範囲等についてはBase64に変換しない等、特殊なエンコーディングを行う。かつてのSMTP等のように、7ビット単位でしかデータを扱えない通信方式を利用する場合を想定して作られている。ステートフルエンコーディングであり、運用上問題が多いため、現在ではこの方式は推奨されていない。Unicode文字を7ビット単位伝送通信にどうしても通さなければならない場合は、替わりにUTF-8をQuoted-printableあるいはBase64で変換するなどの方式が好ましいとされる。
UTF-8(UTF-2、UTF-FSS)
8ビット単位の可変長コード(1~4バイト)にエンコードする方式。ASCIIに対して上位互換となっており、文字の境界が明確である、エンコード・デコードに際して乗除算などの負荷の高い処理が必要ないなどの特長を持ち、インターネットではもっとも一般的に利用されている。
BOM (Byte Order Mark) がついているものをUTF-8、ついていないものをUTF-8Nとして区別することもある。<ref>もともと8ビットを基本とするUTF-8ではBOMを付与する必要はないが、UTF-8であることを示すフラグとしてファイル先頭に EF BB BF の3バイトが付与されることがある。Windowsのメモ帳では標準でBOMが付与される。</ref>Internet Explorerでは、BOMのついていないUTF-8の文書を読み込むとShift_JISだと誤認する一方で、BOMがついていると有効なデータとして受け付けないアプリケーションも存在する。<ref>ここでいうBOMはバイトオーダーを表すものではなく、UTF-16における「真の意味でのBOM」と類似する存在であるがゆえに慣用的にこう呼ばれているに過ぎない。</ref>
UTF-16
BMPを16ビット、その他を#サロゲートペアという仕組みを使い32ビットで指定する文字コード。Windows XPなどの近年のOSの内部コードには、この形式が使われている。UCS-2ともBMPの範囲で互換性がある。
ファイルの先頭には通常BOM<ref>BOMとは、8ビットを基本とするシステムでバイトオーダーを識別するためのフラグであり、ファイルの先頭に付与される。値はU+FEFF。システムが読み込んだ先頭2バイトが0xFF,0xFEならリトルエンディアン、0xFE,0xFFならビッグエンディアンとして後に続く文書を処理する。
RFC 2781 ではBOMが付いていないUTF-16文書はビッグエンディアンとして解釈することになっている。Windowsのメモ帳では標準でBOMが付与されるようになっている。</ref>が付与される。ビッグエンディアンのものをUTF-16BEリトルエンディアンのものをUTF-16LEとして区別することもある。Windows上の文書における「Unicodeテキスト」は特に明記のない場合につき、リトルエンディアンのことを指す。TCP/IPネットワークでは、ビッグエンディアンに決められている(→ エンディアン)。
UTF-32 (Unicode 3.1)
Unicodeの全コードを単一長のコードとして32ビットで指定するコード。実際に使われるのは21ビット(Unicodeの空間がU+10FFFFまでであるため)。この21ビットの範囲内ではUCS-4と互換性がある。これもUTF-16と同じく、ビッグエンディアンリトルエンディアンが存在し、それぞれUTF-32BEUTF-32LEと呼ばれる。単純な符号化方式であるが、文章のサイズが大きくなるため(全てBMPの文字からなる文章の場合はUTF-16符号化の2倍のサイズとなる)、ほとんど使用されない。そのためかMicrosoft Officeのエンコードされたテキストファイルの読み書きはこの符号化方式には未だ対応していない。フリーウェアおよびシェアウェアの多数の符号化方式に対応しているテキストエディタでもこの符号化方式には対応していないものは多い。

以下はエイプリルフールに公開されたジョークRFCである。UTF-9に関しては同名の規格が実際に検討されていたが、ドラフト段階で破棄されているため重複にはならない。

UTF-9
可変長の9ビットコードによりエンコードする方式。1バイトが8ビットオクテット)ではなく9ビット(ノネット)であるような環境での利用を想定している。UTF-8と比較した場合、Latin-1領域が1バイト、CJK統合漢字領域が2バイトで表現できる特長があり、データ量が少なくなる。ワード長が9の倍数のコンピュータ(ACOS-6など)であれば計算コストも低い。
UTF-18
Unicode符号位置を単一の18ビットによりエンコードする方式。UTF-8に対するUTF-16のようなものだが、RFC公開時点のUnicodeで文字が定義されていた4つのを余った2ビットで識別するため、サロゲートは使わない。

以下はドラフト段階で破棄された規格案。

UTF-5
国際化ドメイン名での利用を想定し、0~9、A~Vの32文字でエンコードする方式。国際化ドメイン名にはPunycodeが採用されたため、利用されていない。

[編集] サロゲートペア

Unicodeは 216 = 65,536 種類の文字を収録でき、当初の構想では世界中のすべての文字をこの16ビット固定長のコード体系に登録可能と思われていた。だが、Unicode 1.0公表後、拡張可能な空き領域2万字分を巡り、各国から文字追加要求が起こった。その内容は中国、日本、台湾、ベトナム、シンガポールの追加漢字約1万5千字、古ハングル約5千字、未登録言語の文字等々である。このため、Unicodeの16ビット枠内に全世界の文字を収録するという計画は早々に破綻し、1996年、Unicode 2.0ではサロゲートペア (Surrogate Pair) の拡張が盛り込まれた。Surrogateは「代理」、Pairは「対(つい)」の意味。

サロゲートペアは16ビットUnicodeの未定義領域1024文字分を2つ使い(前半0xD800~0xDBFF, 後半0xDC00~0xDFFF)、それをペアにすることで1文字を表し (1024 × 1024 = 1,048,576文字)、その1,048,576文字を256 × 256の区点 (row, cell) からなる「面」 (plane) に順番に割り振っていく。これにより 1,048,576 / (256 × 256 = 65,536) = 16 で、全部で第16面までの文字を収録することができる。つまり第01面から第16面までであり、これに加えて第00面 (BMP) も使用可能なので、合計で 1,048,576 + 65,536 - 2,048 = 111万2,064文字が使用可能になる。エスケープシーケンスこそ使用しないものの、16ビット文字コード体系との互換性を維持するために、UTF-16(16ビットを基本単位とする文字符号化方式)を採用した結果、Unicodeは16ビットと32ビットが混在する複雑な可変長文字コードとなってしまった。

現在第1面はSupplementary Multilingual Plane(SMPと略される。補助多言語面。主に古代文字が収録されている。)、第2面はSupplementary Ideographic Plane(SIP,補助漢字面。漢字専用領域。)、第14面はSupplementary Special-purpose Plane(SSP,補助特殊目的面。制御コード専用領域。)、第15面および第16面は私用目的のための面(BMPのU+E000~U+F8FFの領域の拡張)と決められている。
第3面~第13面は未使用である。(そのうち第3面は漢字が第2面で足りなくなったときのために予約されている。)

日本では2000年にJIS X 0208を拡張する目的でJIS X 0213(いわゆるJIS第3第4水準)が制定されたが、この際、新たに採用された文字でUnicodeに無かったものの一部は、BMPに収録できず、第2面への収録となった(最終対応は2002年)。このため、JIS X 0213収録文字を完全にサポートするにはサロゲートペアをサポートしたOSフォントアプリケーションが必要となる<ref>Shift_JIS等、Unicodeにて規定されるもの以外のエンコーディングを利用する場合であっても、JIS X 0213に対応するフォントやアプリケーションが必要なことは言うまでも無い。</ref>。

サロゲートペアの方式は16ビット固定長を志向したUTF-16との互換性維持のために設けられた拡張であり、UTF-8符号化方式では利用されることはないが、多くのOS、アプリケーションは内部のエンコード方式にUTF-16を使用しているため、事実上、UTF-8で使用できる文字もサロゲートペアへの対応、非対応に拘束されることになる。

[編集] 歴史

  • 1991年10月 - Unicode 1.0
  • 1993年6月 - Unicode 1.1
  • 1996年7月 - Unicode 2.0 ハングルの大移動、サロゲートペアの導入。
    • ハングルの文字数が6656字から11172字へ増加され、1.xと互換性のない文字コード位置に移動した。
    • 65536文字の制限を取り払い、収容可能な文字を大幅に増やした。
  • 1998年5月 - Unicode 2.1
  • 1999年9月 - Unicode 3.0 CJK統合漢字の拡張Aで漢字6582字を追加。
  • 2001年3月 - Unicode 3.1 BMP以外の拡張。CJK統合漢字の拡張Bで漢字42711字を追加し、JIS X 0213一部対応。
  • 2002年3月 - Unicode 3.2 JIS X 0213正式対応。
  • 2003年4月 - Unicode 4.0.0
  • 2005年3月 - Unicode 4.1.0
  • 2006年7月 - Unicode 5.0.0

[編集] 日本語環境でのUnicodeの諸問題

[編集] YEN SIGN問題

Shift_JISではJIS X 0201における円記号 "¥" が0x5Cに置かれている。これをUnicodeのマッピングに合わせるとYEN SIGN (U+00A5) にマップされる。しかし、0x5CはASCIIではバックスラッシュ "\" に相当し、C言語などのエスケープシーケンスに使われる事から、この文字のコードを変更すると問題が起きる。そのためUnicodeを利用するアプリケーションはU+007F以下のコードに関しては移動させないという暗黙のルールができている。

そうなると、Unicode環境では円記号がバックスラッシュの表示に変わってしまうように思われるが、これは日本語用のフォントデータの0x5Cの位置には円記号の字形を当ててしまうことで対処している。これによって、それまでの文字コードを使用していたときと同じ感覚で円記号を用いることができる。

この問題は日本語環境に限った事ではない。もともと、ISO646上で0x5Cを含む数種の文字は自由領域(バリアント)として各国での定義を認めていた。そのため、日本語以外でもASCIIでバックスラッシュに相当するコードに異なる記号を当てているケースが多い。例えば、韓国ではウォン記号 (WON SIGN, U+20A9, "₩") である。

[編集] WAVE DASH - FULLWIDTH TILDE問題

マイクロソフトWindowsのShift_JIS ⇔ Unicode変換テーブルを作成する際に、JIS X 0208において1区33点に割り当てられている波ダッシュ "〜" を、Unicodeにおける全角チルダ (FULLWIDTH TILDE, U+FF5E, "~") に割り当てた。JIS X 0221規定のJIS X 0208 ⇔ JIS X 0221対応表では、波ダッシュはWAVE DASH (U+301C, "〜") に対応させており、不整合が生じる。この結果、Mac OS等のJIS X 0221準拠のShift_JIS ⇔ Unicode変換テーブルをもつ処理系と、Windowsとの間でUnicodeデータをやり取りする場合、文字化けを起こすことになる。そこでWindows以外のOS上で動くアプリケーションの中には、CP932という名前でマイクロソフト仕様のShift_JISコード体系を別途用意して対応しているケースが多い<ref>この副次効果により、Windows以外のシステムにおいてもShift_JISにて、NEC特殊文字やIBM拡張文字を扱うことが出来るようになる。</ref>。この原因とされているUnicode仕様書の例示字形の問題に関しては、波ダッシュ#Unicodeに関連する問題を参照すること。

また、マイクロソフトは同様にEM DASH (U+2014, "—") をHORIZONTAL BAR (U+2015, "―") に、DOUBLE VERTICAL LINE (U+2016, "‖") をPARALLEL TO (U+225, "∥") に、MINUS SIGN (U+2212, "−") をFULLWIDTH HYPHEN-MINUS (U+FF0D, "-") に割り当てており、これらの変換時にも問題が起こる。

[編集] 一覧

Unicodeの一覧

0000-0FFF
1000-1FFF
2000-2FFF
3000-3FFF
4000-4FFF
5000-5FFF
6000-6FFF
7000-7FFF

8000-8FFF
9000-9FFF
A000-AFFF
B000-BFFF
C000-CFFF
D000-DFFF
E000-EFFF
F000-FFFF

10000-10FFF
12000-12FFF
1D000-1DFFF

20000-20FFF
21000-21FFF
22000-22FFF
23000-23FFF
24000-24FFF
25000-25FFF
26000-26FFF
27000-27FFF

28000-28FFF
29000-29FFF
2A000-2AFFF

2F000-2FFFF


E0000-E0FFF

コード順分類一覧
範囲名称備考
U+0000-007FBasic Latin基本ラテン (ASCII互換)
U+0080-00FFLatin-1 Supplementラテン追加文字
U+0100-017FLatin Extended-Aラテン拡張A
U+0180-024FLatin Extended-Bラテン拡張B
U+0250-02AFIPA ExtensionsIPA拡張 (国際音声記号)
U+02B0-02FFSpacing Modifier Letters前進を伴う修飾文字
U+0300-036FCombining Diacritical Marksダイアクリティカルマーク(合成可能)
U+0370-03FFGreek and Copticギリシア文字コプト文字
U+0400-04FFCyrillicキリル文字
U+0500-052FCyrillic Supplement
U+0530-058FArmenianアルメニア文字
U+0590-05FFHebrewヘブライ文字
U+0600-06FFArabicアラビア文字
U+0700-074FSyriacシリア文字
U+0750-077FArabic Supplementアラビア文字追加
U+0780-07BFThaanaターナ文字
U+07C0-07FFNKoンコ文字
U+0900-097FDevanagariデーヴァナーガリー
U+0980-09FFBengaliベンガル文字
U+0A00-0A7FGurmukhiグルムキー文字
U+0A80-0AFFGujaratiグジャラート文字
U+0B00-0B7FOriyaオリヤー文字
U+0B80-0BFFTamilタミル文字
U+0C00-0C7FTeluguテルグー文字
U+0C80-0CFFKannadaカンナダ文字
U+0D00-0D7FMalayalamマラヤラム文字
U+0D80-0DFFSinhalaシンハラ文字
U+0E00-0E7FThaiタイ文字
U+0E80-0EFFLaoラオ文字
U+0F00-0FFFTibetanチベット文字
U+1000-109FMyanmarミャンマー文字
U+10A0-10FFGeorgianグルジア文字
U+1100-11FFHangul Jamoハングル字母
U+1200-137FEthiopicエチオピア文字
U+1380-139FEthiopic Supplement
U+13A0-13FFCherokeeチェロキー文字
U+1400-167FUnified Canadian Aboriginal Syllabics統合カナダ先住民音節文字
U+1680-169FOghamオガム文字
U+16A0-16FFRunicルーン文字
U+1700-171FTagalogタガログ文字
U+1720-173FHanunooハヌノオ文字
U+1740-175FBuhidブヒッド文字
U+1760-177FTagbanwaタグバンワ文字
U+1780-17FFKhmerクメール文字
U+1800-18AFMongolianモンゴル文字
U+1900-194FLimbuリンブ文字
U+1950-197FTai Leタイ・レ文字
U+1980-19DFNew Tai Lue新タイ・ルー文字
U+19E0-19FFKhmer Symbolsクメール記号
U+1A00-1A1FBugineseブギ文字
U+1B00-1B7FBalineseバリ文字
U+1D00-1D7FPhonetic Extensions表音拡張
U+1D80-1DBFPhonetic Extensions Supplement
U+1DC0-1DFFCombining Diacritical Marks Supplementダイアクリティカルマーク追加(合成可能)
U+1E00-1EFFLatin Extended Additionalラテン拡張追加
U+1F00-1FFFGreek Extendedギリシア文字拡張
U+2000-206FGeneral Punctuation一般句読点
U+2070-209FSuperscripts and Subscripts上付き・下付き文字
U+20A0-20CFCurrency Symbols通貨記号
U+20D0-20FFCombining Diacritical Marks for Symbols記号用ダイアクリティカルマーク(合成可能)
U+2100-214FLetterlike Symbols文字様記号
U+2150-218FNumber Forms数字に準じるもの
U+2190-21FFArrows矢印
U+2200-22FFMathematical Operators数学演算子
U+2300-23FFMiscellaneous Technicalその他の技術用記号
U+2400-243FControl Pictures制御機能用記号
U+2440-245FOptical Character RecognitionOCR記号
U+2460-24FFEnclosed Alphanumerics囲み英数字
U+2500-257FBox Drawing罫線素辺
U+2580-259FBlock Elementsブロック要素
U+25A0-25FFGeometric Shapes幾何学模様
U+2600-26FFMiscellaneous Symbolsその他の記号
U+2700-27BFDingbats装飾記号
U+27C0-27EFMiscellaneous Mathematical Symbols-Aその他の数学記号A
U+27F0-27FFSupplemental Arrows-A追加矢印A
U+2800-28FFBraille Patternsブライユ点字図形
U+2900-297FSupplemental Arrows-B追加矢印B
U+2980-29FFMiscellaneous Mathematical Symbols-Bその他の数学記号B
U+2A00-2AFFSupplemental Mathematical Operators追加数学演算子
U+2B00-2BFFMiscellaneous Symbols and Arrowsその他の記号と矢印
U+2C00-2C5FGlagoliticグラゴール文字
U+2C60-2C7FLatin Extended-Cラテン拡張C
U+2C80-2CFFCopticコプト文字
U+2D00-2D2FGeorgian Supplementグルジア文字追加
U+2D30-2D7FTifinaghティフナグ文字
U+2D80-2DDFEthiopic Extendedエチオピア文字拡張
U+2E00-2E7FSupplemental Punctuation追加句読点
U+2E80-2EFFCJK Radicals SupplementCJKの部首補助
U+2F00-2FDFKangxi Radicals康熙字典部首
U+2FF0-2FFFIdeographic Description Characters漢字構成記述用文字(IDC)
U+3000-303FCJK Symbols and PunctuationCJK記号と句読点
U+3040-309FHiragana平仮名
U+30A0-30FFKatakana片仮名
U+3100-312FBopomofo注音字母
U+3130-318FHangul Compatibility Jamoハングル互換字母
U+3190-319FKanbun漢文記号(読み下し)
U+31A0-31BFBopomofo Extended注音字母拡張
U+31C0-31EFCJK StrokesCJK字画
U+31F0-31FFKatakana Phonetic Extensionsカタカナ表音拡張
U+3200-32FFEnclosed CJK Letters and MonthsCJK囲み文字
U+3300-33FFCJK CompatibilityCJK互換文字
U+3400-4DBFCJK Unified Ideographs Extension ACJK統合漢字拡張A
U+4DC0-4DFFYijing Hexagram Symbols易経記号
U+4E00-9FFFCJK Unified IdeographsCJK統合漢字
U+A000-A48FYi Syllablesイ文字
U+A490-A4CFYi Radicalsイ文字部首
U+A700-A71FModifier Tone Letters声調記号
U+A720-A7FFLatin Extended-Dラテン拡張D
U+A800-A82FSyloti Nagriシロティ・ナグリ文字
U+A840-A87FPhags-paパスパ文字
U+AC00-D7AFHangul Syllablesハングル
U+D800-DB7FHigh Surrogatesサロゲートペア領域
U+DB80-DBFFHigh Private Use Surrogates
U+DC00-DFFFLow Surrogates
U+E000-F8FFPrivate Use Area私用領域(外字領域)
U+F900-FAFFCJK Compatibility IdeographsCJK互換漢字
U+FB00-FB4FAlphabetic Presentation Formsアルファベット表示形
U+FB50-FDFFArabic Presentation Forms-Aアラビア表示形A
U+FE00-FE0FVariation Selectors異体字セレクタ
U+FE10-FE1FVertical Forms縦書き用句読点
U+FE20-FE2FCombining Half Marks合成用半記号
U+FE30-FE4FCJK Compatibility FormsCJK互換形
U+FE50-FE6FSmall Form Variants小書き
U+FE70-FEFFArabic Presentation Forms-Bアラビア表示形B
U+FF00-FFEFHalfwidth and Fullwidth Forms全角半角
U+FFF0-FFFFSpecials特殊用途
U+10000-1007FLinear B Syllabary線文字B
U+10080-100FFLinear B Ideograms
U+10100-1013FAegean Numbersエーゲ数字
U+10140-1018FAncient Greek Numbers古代ギリシア数字
U+10300-1032FOld Italic古イタリア文字
U+10330-1034FGothicゴート文字
U+10380-1039FUgariticウガリット文字
U+103A0-103DFOld Persian古ペルシア文字
U+10400-1044FDeseretデゼレット文字
U+10450-1047FShavianシェイヴィアン文字
U+10480-104AFOsmanyaオスマン文字
U+10800-1083FCypriot Syllabaryキプロス文字
U+10900-1091FPhoenicianフェニキア文字
U+10A00-10A5FKharoshthiカローシュティー文字
U+12000-123FFCuneiform楔形文字
U+12400-1247FCuneiform Numbers and Punctuation
U+1D000-1D0FFByzantine Musical Symbolsビザンティン音楽記号
U+1D100-1D1FFMusical Symbols音楽記号
U+1D200-1D24FAncient Greek Musical Notation古代ギリシア記譜法
U+1D300-1D35FTai Xuan Jing Symbols太玄経記号
U+1D360-1D37FCounting Rod Numerals算木
U+1D400-1D7FFMathematical Alphanumeric Symbols数学用英数字記号
U+20000-2A6DFCJK Unified Ideographs Extension BCJK統合漢字拡張B
U+2F800-2FA1FCJK Compatibility Ideographs SupplementCJK互換漢字追加
U+E0000-E007FTags言語タグ
U+E0100-E01EFVariation Selectors Supplement異体字セレクタ追加
U+F0000-FFFFFSupplementary Private Use Area-A追加私用領域A
U+100000-10FFFFSupplementary Private Use Area-B追加私用領域B

[編集] 関連項目

[編集] 外部リンク

[編集] 脚注

<references/>

ことばこって?

「ことばこ」は、歴史の人物から最先端テクノロジーまで、なんでも調べられるオンライン百科事典です。ウィキペディア財団が運営を行なっているwikipedia.orgから引用をしています。

おススメサイト
トラブログ
アレどう?
アフィリエイトB