Unicode

出典: Wikipedio


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

ゼロックス社が提唱し、マイクロソフトアップルIBMサン・マイクロシステムズヒューレット・パッカードジャストシステムなどが参加するユニコードコンソーシアムにより作られた。1993年ISOでもISO/IEC 10646の一部として標準化されたが、Unicodeと完全に同一の規格ではない<ref>相違点のいくつかはUnicodeベースになる前のDIS 10646に由来する。</ref>。

目次

概要

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

元々16ビットの文字集合で全ての文字の網羅を目指して開発されたが、符号位置が圧倒的に足りなくなり、Unicode 2.0以降では、21ビットの文字集合として規定されることとなった。当初の16ビットの領域は基本多言語面 (BMP) と呼ばれ、ISO/IEC 10646においてUCS-2で定義される範囲と同一である。ISO/IEC 10646におけるUCS-4は31ビットの文字集合であり、21ビットのUnicodeとは別物である。

Unicodeの文字を表現する場合、"U+"にその文字の符号位置を表す16進数の値を続ける。この値をコードポイントと言う。 BMP はU+0000 - U+FFFF の 4 桁に対応し、21 ビットの空間は U+0000 - U+10FFFF であり、必要に応じて 5、6 桁で表す。

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

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

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

文字集合

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

エンコーディング(符号化方式)

Template:Main2

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

以下はエイプリルフールに公開されたジョーク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が採用されたため、利用されていない。
UTF-9
可変長コード(1〜5バイト)の8ビット符号単位で表現する文字符号化形式または文字符号化スキーム。ISO-8859-1に対して一部互換である。しかし、UTF-8が普及しつつあり、それと比べて欠点がいくつかあったため、破棄された。

拡張領域

Template:Anchor

Unicodeでは代用対をサロゲートペア(Template:Lang-en-short)の日本語表記としている。

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

サロゲートペア(代用対)は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ビット符号単位一つと16ビット符号単位二つ(合計32ビット)が混在する複雑な可変長文字コードとなってしまった。

サロゲートペア(代用対)の方式は16ビット固定長を志向したUTF-16との互換性維持のために設けられた拡張であり、UTF-8やUTF-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面はTertiary Ideographic Plane(直訳すると第三の漢字面)で、2009年3月現在では1字も収録されていないが、古代漢字や甲骨文字が収録される予定である。

第4面〜第13面は未使用で将来どのような目的で使用するのかすら決まっていない。

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

歴史

1984年、ISOの文字コード規格委員会 (ISO/TC 97/SC2) は文字セットの切り替えを行わずに世界中の文字を単一の文字集合として扱える文字コード規格 (ISO 10646) を作成することを決定し、専門の作業グループ (ISO/TC 97/SC 2/WG 2) を設置し、作業を始めていた。1980年代後半にはこの作業グループにおいてさまざまな提案が検討されている。1990年になって出来あがったISO/TC 97/SC 2/WG 2作成のISO 10646の初版ドラフトDIS (Draft International Standard) では、漢字コードは32bitで表現され、各国の漢字コードはそのまま入れることになった。しかし中国は漢字を各国でばらばらに符号化するのではなく、あくまで統一して扱うことを求めてこのドラフトには当初から反対しており、今後の漢字コードの方針を決めるため、WG 2は CJK-JRG (Joint Research Group) と呼ばれるグループを別途設置し、そこで引き続き検討することにした。

このような公的機関の動きとは別に、1987年頃からXeroxのJoe BeckerとLee Collinsは、後にユニコードと呼ばれるようになる世界中の文字を統一して扱える文字コードを開発していた。1989年9月には「Unicode Draft 1」が発表された。ここではその基本方針として、2オクテット(16ビット)固定長で全ての文字を扱えることを目指しており、そのために日本・中国・韓国の漢字を統一することで2万弱の漢字コードを入れ、さらに将来の拡張用に、3万程度の漢字の空き領域が別に用意されていた。このドラフトは少しずつ改良を加えられながら1990年4月にUnicode Draft 2、同年12月 Unicode Final Draftとなった。さらに1991年1月にはこのUnicode Final Draftに賛同する企業によって、ユニコードコンソーシアムが設立された。

1991年6月、ISO/IEC 10646による4オクテット固定長コードを主体としたドラフト「DIS 10646第1版」は、2オクテット固定長コードであるUnicodeとの一本化を求める各国により否決され、ISO 10646とUnicodeの一本化が図られることになった。また中国およびUnicodeコンソーシアムの要請により、CJK-JRGにおいて、ISO 10646とUnicodeの一本化が図られることになった。CJK-JRGは各国の漢字コードに基づき独自の統合規準を定め、ISO 10646 / Unicode用の統合漢字コード表を作成することになった。CJK-JRGの会合は第1回が7月22日から24日にかけて東京で、第2回の会合が9月17日から19日にかけて北京で、第3回が11月25日から29日にかけて香港で開催された。これらの討議の結果1991年末になって「ISO 10646=Unicode」用の統合漢字コード表が Unified Repertoire and Ordering (URO)の第1版として完成した。

Unicodeの最初の印刷されたドキュメントであるUnicode 1.0は、統合漢字表の完成に先行して漢字部分を除いたUnicode 1.0, Vol.1が1991年10月に出版され、後に1992年になって漢字部分だけのUnicode 1.0, Vol.2が出版された。

1992年CJK統合漢字Unified Repertoire and Ordering (URO) 第二版が完成し、これを取り込んだ(ただしUROには若干の間違いが発見されており、それらの修正が行われている。)DIS 10646第2版が5月30日国際投票の結果可決された。

1993年5月1日 「ISO/IEC 10646-1: 1993 Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and basic Multilingual Plane」が制定される。同年翌6月にUnicode 1.0は ISO/IEC 10646-1:1993にあわせた変更を行いUnicode 1.1となり、以後ユニコードとISO/IEC 10646とは歩調を合わせて改訂されていくことになる。

各バージョンとその特徴

ユニコードのバージョンは、メジャーバージョン(the major version)、マイナーバージョン(the minor version)、アップデートバージョン(the update version)の三つの部分から構成され、ピリオドでつなげて表示される。但しマイナーバージョン及びアップデートバージョンについては0の場合には省略して表示されることもある。メジャーバージョンはレパートリーの追加のような重要な変更が行われたときにされる。ユニコードのドキュメントは書籍形態と電子版ドキュメント形態の両方で公表され、どちらもユニコードについての正式なドキュメントであるとされており、新たなバージョンがリリースされたときは新たなドキュメントが公表されるが、書籍として刊行されるのはメジャーバージョンが改定された場合のみである。書籍版のバージョン1.0は、2巻に分けて刊行され、統合漢字部分を除いた第1巻は1991年10月に、統合漢字部分の第2巻は1992年6月に刊行された。そのため第1巻のみのものをUnicode 1.0.0、第2巻を含めたものをUnicode 1.0.1と呼ぶことがある。

バージョン収録文字数概要日本語における主要な追加文字
1991年10月Unicode 1.0.07,161初期バージョン、16ビットの文字コードJIS X 0201
1992年6月Unicode 1.0.128,359CJK統合漢字を導入JIS X 0208、JIS X 0212
1993年6月Unicode 1.134,233ISO/IEC 10646-1:1993にあわせ変更
1996年7月Unicode 2.038,950ISO/IEC 10646-1:1993の追補Amd.1からAmd.7に対応。ハングルの大移動を行いUnicode1.xとの互換性を失う(Amd.5)、サロゲートペア(代用対)を導入し追加面を可能にして収容可能な文字を大幅に増やす、21ビット領域に拡張(Amd.1)
1998年5月Unicode 2.138,952ユーロ記号と正誤表を追加
1999年9月Unicode 3.049,259ISO/IEC 10646-1:2000が発行されるまでの追補Amd.8からAmd.31の文字すべてに対応。CJK統合漢字拡張Aで漢字6582字を追加(Amd.17)地名や人名などに用いられる漢字
2001年3月Unicode 3.194,205ISO/IEC 10646-2:2001に対応。BMP以外の拡張。CJK統合漢字の拡張Bで漢字42711字を追加し、JIS X 0213一部対応地名や人名などに用いられる漢字
2002年3月Unicode 3.295,221ISO/IEC 10646-1:2000の追補Amd.1に対応。JIS X 0213正式対応
2003年4月Unicode 4.0.096,447ISO/IEC 10646:2003に対応
2005年3月Unicode 4.1.097,720ISO/IEC 10646:2003の追補Amd.1に対応
2006年7月Unicode 5.0.099,089ISO/IEC 10646:2003の追補Amd.2とシンド語(Amd.3に含まれる)に対応
2008年4月4日<ref>Template:Cite web</ref>Unicode 5.1.0100,713ISO/IEC 10646:2003の追補Amd.3とAmd.4に対応。異体字セレクタを漢字に対して使い始める<ref>Template:Cite web</ref>麻雀牌、割り算の記号、電話機の星印、Adobe-Japan1-6の漢字字形<ref>Template:Cite web</ref>
2009年10月Unicode 5.2.0107,361ISO/IEC 10646:2003の追補Amd.6までに対応ARIB外字

ユニコードのバージョンには、上記のような「ユニコードの規格全体に付けられたバージョン」の他に「ユニコードを構成する個々の要素の規格に付けられたバージョン」が存在する。これに該当するものとしては、ユニコードを構成する各面ごとに付けられたバージョンやユニコードに収録されないこととされたスクリプトのリストに付けられたバージョンなどが存在する。

日付 BMP[1] SMP[2] SIP[3] TIP[4] SSP[5] NOR[6]
2001年10月10日 3.0[7] 3.0[8] 3.0[9] 1.0[10]
2001年10月12日 3.1[11]
2001年10月27日 3.1[12]
2001年11月27日 3.0[13]
2002年1月22日 3.2[14] 3.1[15]
2002年1月29日 3.3[16]
2002年2月5日 3.4[17]
2002年4月3日 3.2[18]
2002年4月4日 3.5[19]
2002年6月7日 3.6[20] 3.3[21]
2002年6月23日 3.7[22]
2002年10月2日 3.8[23]
2002年10月28日 3.9[24]
2002年11月11日 3.1[25]
2002年12月3日 3.10[26] 3.4[27]</br>

3.5[28]

2002年12月11日 3.11[29]
2003年3月12日 3.12[30] 3.6[31]
2003年3月15日 3.7[32]
2003年4月16日 4.0[33] 4.0[34] 4.0[35] 4.0[36] 4.0[37]
2003年5月4日 4.1[38]
2003年5月16日 4.1[39]
2003年6月18日 4.2[40] 4.1[41]
2003年7月15日 4.1[42]
2003年8月19日 4.3[43]
2003年9月11日 4.4[44] 4.2[45]
2003年9月20日 4.5[46]
2003年10月22日 4.6[47]
2003年10月31日 4.3[48]
2003年12月23日 4.7[49] 4.4[50]
2004年5月27 4.5[51]
2004年6月24日 4.8[52] 4.6[53]
2004年7月3日 4.7[54]
2004年12月1日 4.1[55]
2005年1月27日 4.2[56]
2005年1月28日 4.9[57] 4.8[58]
2005年3月31日 4.10[59] 4.9[60]
2005年5月27日 4.10[61] 4.2[62]
2005年6月10日 4.11[63] 4.11[64]
2005年6月27日 4.12[65] 4.12[66] 4.3[67] 4.2[68] 4.3[69]
2005年8月1日 4.13[70] 4.13[71]
2005年9月6日 4.14[72]
2005年9月14日 4.15[73]
2005年9月17日 4.14[74]
2005年9月19日 4.16[75]
2005年12月8日 4.15[76]
2006年1月11日 4.17[77] 4.16[78]
2006年4月17日 4.18[79] 4.17[80] 4.4[81]
2006年4月28日 4.4[82]
2006年9月21日 5.0[83] 5.0[84] 5.0[85] 5.0[86] 5.0[87]
2006年9月29日 5.0.1[88] 5.0.1[89]
2007年3月14日 5.0.1[90]
2007年4月11日 5.0.2[91] 5.0.2[92]
2007年5月5日 5.0.3[93] 5.0.3[94]
2007年7月24日 5.0.4[95] 5.0.4[96] 5.0.1[97]
2007年8月22日 5.0.5[98]
2007年8月29日 5.0.5[99]
2008年1月15日 5.0.6[100]
2008年1月31日 5.0.6[101]
2008年2月14日 5.0.7[102] 5.0.7[103]
2008年4月4日 5.1.0[104] 5.1.0[105] 5.1.0[106] 5.1.0[107] 5.1.0[108]
2008年4月25日 5.1.1[109] 5.1.1[110] 5.1.0[111] 5.1.1[112]
2008年8月12日 5.1.2[113] 5.1.2[114]
2008年8月19日 5.1.3[115]
2008年10月17日 5.1.4[116] 5.1.3[117] 5.1.1[118]
2009年2月4日 5.1.5[119] 5.1.4[120]
2009年2月26日 5.1.1[121]
2009年4月22日 5.1.2[122]
2009年4月24日 5.1.5[123]
2009年10月1日 5.2.0[124] 5.2.0[125] 5.2.0[126] 5.2.0[127] 5.2.0[128] 5.2.0[129]
2009年11月18日 5.2.1[130]
2010年2月5日 5.2.1[131]
2010年2月10日 5.2.2[132]
2010年2月23日 5.2.3[133]
2010年4月23日 5.2.2[134] 5.2.4[135]
2010年5月12日 5.2.5[136]

Unicodeの諸問題

バージョンごとの非互換性

Unicodeは同一のコードでもバージョンが変わったとき完全に異なった文字を定義し直したことがある。

最も有名な事象がUnicode 2.0でのハングルの大移動である。これはUnicode 1.1までで定義されていたハングルの領域を破棄し、新しいハングルの領域を別の位置に設定し、破棄された領域には別の文字の領域を割り当てることとなった。その後、Unicode 3.0でCJK統合漢字拡張Aが割り当てられた。このように、Unicode 1.1以前でハングルを記述した文書とUnicode 2.0以降でCJK統合漢字拡張Aを記述した文書には互換性がない<ref>RFC 36295. Versions of the standardsでKorean mess (ハングル大移動) について、8. MIME registrationでUTF-8にバージョン指定がない理由についての言及がある。</ref>。

日本語環境でのUnicodeの諸問題

YEN SIGN問題

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

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

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

WAVE DASH - FULLWIDTH TILDE問題

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

また、マイクロソフトは同様にEM DASH (U+2014, "—") をHORIZONTAL BAR (U+2015, "―") に、DOUBLE VERTICAL LINE (U+2016, "‖") をPARALLEL TO (U+2225, "∥") に、MINUS SIGN (U+2212, "−") をFULLWIDTH HYPHEN-MINUS (U+FF0D, "-") に割り当てており、これらの変換時にも問題が起こる。Windows VistaやMicrosoft Office 2007に付属するIMEパッドの文字一覧におけるJIS X 0213の面区点の表示は、上記の文字についてもJISで規定されているものと同じマッピングを使用している<ref>Template:Cite web</ref>。

一覧

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
11000-11FFF
12000-12FFF
13000-13FFF
14000-14FFF
15000-15FFF
16000-16FFF
17000-17FFF

18000-18FFF
19000-19FFF
1A000-1AFFF
1B000-1BFFF
1C000-1CFFF
1D000-1DFFF
1E000-1EFFF
1F000-1FFFF

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

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

2F000-2FFFF

E0000-E0FFF

コード順分類一覧
範囲名称日本語名称
U+0000-007FBasic Latin基本ラテン文字ASCII互換)
U+0080-00FFLatin-1 Supplementラテン1補助
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+0800-083FSamaritanサマリア文字 *
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+18B0-18FFUnified Canadian Aboriginal Syllabics Extended統合カナダ先住民音節拡張 *
U+1900-194FLimbuリンブ文字
U+1950-197FTai Leタイ・ロ文字
U+1980-19DFNew Tai Lue新タイ・ロ文字
U+19E0-19FFKhmer Symbolsクメール文字用記号
U+1A00-1A1FBugineseブギス文字
U+1A20-1AAFTai Thamラーンナー文字 *
U+1B00-1B7FBalineseバリ文字
U+1B80-1BBFSundaneseスンダ文字 *
U+1C00-1C4FLepchaレプチャ文字 *
U+1C50-1C7FOl Chikiオルチキ文字 *
U+1CD0-1CFFVedic Extensionsヴェーダ文字拡張 *
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 Recognition光学的文字認識OCR
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+2DE0-2DFFCyrillic Extended-Aキリール文字拡張A *
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 Months囲みCJK文字・月
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+A4D0-A4FFLisuリス文字 *
U+A500-A63FVaiヴァイ文字 *
U+A640-A69FCyrillic Extended-Bキリール文字拡張B *
U+A6A0-A6FFBamumバムン文字 *
U+A700-A71FModifier Tone Letters声調修飾文字
U+A720-A7FFLatin Extended-Dラテン文字拡張D
U+A800-A82FSyloti Nagriシロティナグリ文字
U+A830-A83FCommon Indic Number Forms共通インド数字に準じるもの *
U+A840-A87FPhags-paパスパ文字
U+A880-A8DFSaurashtraサウラーシュトラ文字 *
U+A8E0-A8FFDevanagari Extendedデーヴァーナーガリー文字拡張 *
U+A900-A92FKayah Liカヤー文字 *
U+A930-A95FRejangルジャン文字 (レジャン文字) *
U+A960-A97FHangul Jamo Extended-Aハングル字母拡張A *
U+A980-A9DFJavaneseジャワ文字 *
U+AA00-AA5FChamチャム文字 *
U+AA60-AA7FMyanmar Extended-Aミャンマー文字拡張A(ビルマ文字拡張A) *
U+AA80-AADFTai Vietタイ・ヴェト文字 *
U+ABC0-ABFFMeetei Mayekマニプリ文字 *
U+AC00-D7AFHangul Syllablesハングル音節文字
U+D7B0-D7FFHangul Jamo Extended-Bハングル字母拡張B *
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線文字B表意文字
U+10100-1013FAegean Numbersエーゲ数字
U+10140-1018FAncient Greek Numbers古代ギリシア数字
U+10190-101CFAncient Symbols古代記号 *
U+101D0-101FFPhaistos Discファイストスの円盤の文字 *
U+10280-1029FLycianリキア文字 *
U+102A0-102DFCarianカリア文字 *
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+10840-1085FImperial Aramaicアラム文字 *
U+10900-1091FPhoenicianフェニキア文字
U+10920-1093FLydianリディア文字 *
U+10A00-10A5FKharoshthiカローシュティー文字
U+10A60-10A7FOld South Arabian古典南アラビア文字 *
U+10B00-10B3FAvestanアヴェスター文字 *
U+10B40-10B5FInscriptional Parthian碑文パルティア文字 *
U+10B60-10B7FInscriptional Pahlavi碑文パフラヴィー文字 *
U+10C00-10C4FOld Turkicテュルク文字 *
U+10E60-10E7FRumi Numeral Symbolsルーミー数字記号 *
U+11080-110CFKaithiカイティ文字 *
U+12000-123FFCuneiform楔形文字
U+12400-1247FCuneiform Numbers and Punctuation楔形文字の数字及び句読点
U+13000-1342FEgyptian Hieroglyphsヒエログリフ文字 *
U+1D000-1D0FFByzantine Musical SymbolsTemplate:仮リンク記号
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+1F000-1F02FMahjong Tiles麻雀牌 *
U+1F030-1F09FDomino Tilesドミノ牌 *
U+1F100-1F1FFEnclosed Alphanumeric Supplement囲み英数字補助 *
U+1F200-1F2FFEnclosed Ideographic Supplement囲み表意文字補助 *
U+20000-2A6DFCJK Unified Ideographs Extension BCJK統合漢字拡張B
U+2A700-2B73FCJK Unified Ideographs Extension CCJK統合漢字拡張C *
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

日本語名称がJIS X 0221:2007に掲載されているブロックについてはそれに準拠し、Wikipedia内の他の記事で用いられている名称と異なる場合はその名前も併記した。*印はそれ以降に追加されたブロックであるためJISに基づかない。

脚注

Template:Reflist

参考資料

用語の日本語表記は原則として次にならった。Template:Cite web

関連項目

外部リンク

Template:Link FA ru

Template:Link FA

als:Unicode ar:يونيكود az:Unicode bg:Уникод bn:ইউনিকোড br:Unicode bs:Unikod ca:Unicode chr:Unicode/Cherokee ckb:یوونیکۆد cs:Unicode da:Unicode de:Unicode el:Unicode en:Unicode eo:Unikodo es:Unicode et:Unicode eu:Unicode fa:یونی‌کد fi:Unicode fr:Unicode ga:Unicode gl:Unicode he:יוניקוד hi:यूनिकोड hr:Unicode hu:Unicode hy:Յունիկոդ ia:Unicode id:Unicode is:Unicode it:Unicode jv:Unicode ka:უნიკოდი kn:ಯುನಿಕೋಡ್ ko:유니코드 ks:यूनिकोड ku:Unicode ky:Юникод lt:Unikodas lv:Unikods ml:യൂണികോഡ് mr:युनिकोड ms:Unicode nds:Unicode ne:युनिकोड new:युनिकोड nl:Unicode nn:Unicode no:Unicode pl:Unicode pt:Unicode ro:Unicode ru:Юникод sah:Юникод sh:Unikod simple:Unicode sk:Unicode sl:Unicode sq:Unicode sr:Unikod sv:Unicode ta:ஒருங்குறி te:యూనికోడ్ tg:Юникод th:ยูนิโคด tl:Unikodigo tr:Unicode uk:Юнікод ur:یکرمزی vi:Unicode wa:Unicôde yo:Unicode zh:Unicode zh-min-nan:Thong-iōng-bé zh-yue:統一碼

個人用ツール