Unicode(ユニコード)は、符号化文字集合や文字符号化方式などを定めた、文字コードの業界標準規格。文字集合(文字セット)が単一の大規模文字セットであること(「Uni」という名はそれに由来する)などが特徴である。
従来、各国の標準化団体あるいは各コンピュータメーカーによって独自に開発されていた個々の文字コードの間には互換性がなかった[1]。ISO/IEC 2022のように複数の文字コードを共存させる方法も考案されたが、例えば日本語の漢字と中国語の漢字のように、文字が重複する短所がある。一方Unicodeは、微細な差異はあっても本質的に同じ文字であれば一つの番号を当てる方針で各国・各社の文字コードの統合を図った規格である[1]。1980年代に、Starワークステーションの日本語化(J-Star)などを行ったゼロックスが提唱し、マイクロソフト、Apple、IBM、サン・マイクロシステムズ、ヒューレット・パッカード、ジャストシステムなどが参加するユニコードコンソーシアムにより作られた。国際規格のISO/IEC 10646とUnicode規格は同じ文字コード表になるように協調して策定されている[2]。
Unicodeは世界で使われる全ての文字を共通の文字集合にて利用できるようにしようという考えで作られ、Unix、Windows、macOS、Plan 9[注釈 1]などの様々なオペレーティングシステムでサポートされている。Javaや.NETのようなプログラミング環境でも標準的にサポートされている。現代の文字だけでなく古代の文字や歴史的な文字、数学記号、絵文字なども含む[3]。
Unicode以前の文字コードとの相互運用性もある程度考慮されており、歴史上・実用上の識別が求められる場合には互換領域がとられ、元のコード→Unicode→元のコードというような変換(ラウンドトリップ変換)において、元通りに戻るよう配慮されている文字もある。しかし、正規のJIS X 0208の範囲内であればトラブルは少ないが、複数の文字集合が混在していたり、文字集合の亜種ごとにマッピング(対応づけ)が異なる文字(機種依存文字)を含んでいたりする場合[注釈 2]、変換テーブルによるマッピングが不可逆変換となり文字化けを起こすことがある。
文字コードは、Unicode文字符号化モデル[4]によると以下の4段階に分けられる:
その後、バイト列を、gzipなどで圧縮したり、7ビット伝送路に通すためにBase64やQuoted-printableなどで変換したりすることがあるが、これらは文字コードの管轄範囲外である。
Unicodeの文字集合の符号空間は0 - 10FFFF16で111万4,112の符号位置がある[7]。Unicode 16.0(2024年9月10日公表)では15万4,998個1 (13.9%) の文字[注釈 3]が割り当てられ、65個を制御文字に使い、15万4,537符号位置 (13.8%) を私用文字として確保している。また、2,048文字分をUTF-16のための代用符号位置に使用しており、加えて66の特別な符号位置は使われない。残りの80万2,463符号位置 (72%) は未使用である[8]。
文字を特定する場合にはUnicode符号位置や一意につけられた名前が使われる。例えば、アルファベット小文字の「a」はU+0061 (LATIN SMALL LETTER A)、八分音符「♪」はU+266A (EIGHTH NOTE) である。Unicode符号位置を文章中などに記す場合は "U+" の後に十六進法で符号位置を4桁から6桁続けることで表す。また、符号空間のうち代用符号位置を除く符号位置をUnicodeスカラ値という[9]。
収録されている文字は、各国で標準として規定されている文字集合や実際に使用されている文字を持ち寄り、委員会により取捨選択されている。日本の文字については当初よりJIS X 0201、JIS X 0208、JIS X 0212を、Unicode 3.1からはJIS X 0213の内容も収録している。
また収録において、元の各文字集合内で分離されている文字は尊重するが、異なる文字集合に同一の文字が収録されているとみなされるものは、同じ符号位置に割り当てる方針を取っている。この際に集合が膨大であるという理由で、漢字について、中国、日本、韓国の各規格の漢字を統合しCJK統合漢字としたことは大きな議論となった。
現在では独自創作の絵文字の追加等、当初の目的である「各国・各社の文字コードの統合」から外れた動きも進んでいる。
Unicodeに収録されている文字については、「ブロックの一覧」を参照。
Unicodeでは文字符号化形式としてUTF-8、UTF-16、UTF-32の3種類が定められている。
UTF-8は1符号化文字を1〜4符号単位で表す可変幅文字符号化形式で、1符号単位は8ビットである。
UTF-16は1符号化文字を1〜2符号単位で表す可変幅文字符号化形式で、1符号単位は16ビットである。基本多言語面の文字を符号単位一つで、その他の文字をサロゲートペア(代用対)という仕組みを使い符号単位二つで表現する。
UTF-32は1符号化文字を1符号単位で表す固定幅文字符号化形式で、1符号単位は32ビットである。ただし、Unicodeの符号空間がU+10FFFFまでであるため、実際に使われるのは21ビットまでである。
Unicodeでは文字符号化方式としてUTF-8、UTF-16、UTF-16BE、UTF-16LE、UTF-32、UTF-32BE、UTF-32LEの7種類が定められている。それぞれの符号化形式に対応する符号化方式は表の通り。
文字符号化形式との違いは、文字符号化形式がプログラム内部で文字を扱う場合に符号なし整数として文字を表現する方法なのに対し、文字符号化方式は入出力時にバイト列として表現する方法である。UTF-8は符号単位が8ビットであるため区別する意味はない。
wchar_t
以下はエイプリルフールに公開されたジョークRFCである (RFC 4042)。UTF-9に関しては同名の規格が実際に検討されていた(ただし、内容は大きく異なる)が、ドラフト段階で破棄されているため重複にはならない。
以下はドラフト段階で破棄された規格案。
1980年代の当初の構想では、Unicodeは16ビット固定長で、216 = 6万5,536 個の符号位置に必要な全ての文字を収録する、というもくろみであった。しかし、Unicode 1.0公表後、拡張可能な空き領域2万字分を巡り、各国から文字追加要求が起こった。その内容は中国、日本、台湾、ベトナム、シンガポールの追加漢字約1万5千字、古ハングル約5千字、未登録言語の文字などである。このようにしてUnicodeの、16ビットの枠内に全世界の文字を収録するという計画は早々に破綻し、1996年のUnicode 2.0の時点で既に、文字集合の空間を16ビットから広げることが決まった。この時、それまでの16ビットを前提としてすでに設計されていたシステム(たとえばJavaのchar型や、Windows NT・Windows 95のAPI)をなるべくそのままにしたまま、広げられた空間にある符号位置を表現する方法として、サロゲートペアが定義された。
char
サロゲートペア(代用対)は16ビットUnicodeの領域1,024文字分を2つ使い(前半 U+D800 〜 U+DBFF、後半 U+DC00 〜 U+DFFF)、各々1個ずつからなるペアで1,024 × 1,024 = 1,048,576文字を表す。これはちょうど16面分であり、第1面〜第16面(U+010000 〜 U+10FFFF)の文字をこれで表すこととした。加えて第0面(基本多言語面)も使用可能なので、Unicodeには合計で 1,048,576 + 65,536 - 2,048 = 111万2,064文字分の空間が確保されたことになる。Unicodeの符号空間が10FFFF16まで(サロゲート領域を除いて111万2,064文字)とされているのはUTF-16が表現可能な限界だからである。
サロゲートはUnicodeの符号位置の U+010000 〜 U+10FFFF の範囲を16ビットユニットのペア(2つ)で表現する集合で、最初の16ビットユニットを前半サロゲートもしくはハイサロゲート、二番目を後半サロゲートもしくはローサロゲートと称する。ハイサロゲートは U+D800 〜 U+DBFF の範囲、ローサロゲートは U+DC00 〜 U+DFFF の範囲である。
サロゲートペアはUTF-16でのみ使われ[11]、UTF-8、UTF-32ではすべての符号位置を符号化できるためこのような特別な処理は必要ない。
サロゲートのエンコーディングは、符号位置を C P {\displaystyle CP} 、ハイサロゲートを H S G {\displaystyle HSG} 、ローサロゲートを L S G {\displaystyle LSG} とすると次の通りに計算する。
デコーディングは、
である。
次の表は、この文字変換と他をまとめたものである。 色は、コードポイントからのビットがUTF-16バイトにどのように分配されるかを示した。 なお、UTF-16エンコーディングプロセスによって追加された追加ビットは黒で示されている。
U+0024
0000 0000 0010 0100
0024
00 24
24 00
U+20AC
0010 0000 1010 1100
20AC
20 AC
AC 20
U+20BB7
0010 0000 1011 1011 0111
1101 1000 0100 0010 1101 1111 1011 0111
D842 DFB7
D8 42 DF B7
42 D8 B7 DF
U+10FFFF
1 0000 1111 1111 1111 1111
1101 1011 1111 1111 1101 1111 1111 1111
DBFF DFFF
DB FF DF FF
FF DB FF DF
一つの面は6万5536個の符号位置がある。
U+0000 - U+FFFF
U+10000 - U+1FFFF
U+20000 - U+2FFFF
U+30000 - U+3FFFF
U+40000 - U+4FFFF
U+50000 - U+5FFFF
U+60000 - U+6FFFF
U+70000 - U+7FFFF
U+80000 - U+8FFFF
U+90000 - U+9FFFF
U+A0000 - U+AFFFF
U+B0000 - U+BFFFF
U+C0000 - U+CFFFF
U+D0000 - U+DFFFF
U+E0000 - U+EFFFF
U+F0000 - U+FFFFF
U+100000 - U+10FFFF
日本では2000年にJIS X 0208を拡張する目的でJIS X 0213(いわゆるJIS第3・第4水準)が制定されたが、この際、新たに採用された文字でUnicodeになかったものの一部は、BMPに収録できず、第2面への収録となった(Unicodeが最終的にJIS X 0213への対応を完了したのは2002年である)。このため、JIS X 0213収録文字をUnicodeで完全にサポートするには、追加漢字面をサポートしたOS、フォント、アプリケーションが必要となる。Shift_JISなど、Unicodeにて規定されるもの以外のエンコーディングを利用する場合であっても、JIS X 0213に対応するフォントやアプリケーションが必要である。
常用漢字の2010年改定で追加された字のうち「𠮟」はU+20B9Fで、追加漢字面に含まれる。そのため、改定後の常用漢字完全サポートを謳う場合、Unicodeに対応していて更にこの拡張領域にも対応している必要があると言える。ただ、現状ではこの字は、JIS X 0208に含まれる(=当然、Unicode策定当初からBMPに収録されている)異体字の「叱」(U+53F1) で代用されることが多い。
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 10646#DIS 10646第1版)では、漢字コードは32ビットで表現され、各国の漢字コードはそのまま入れることになった。しかし中国は漢字を各国でばらばらに符号化するのではなく、あくまで統一して扱うことを求めてこのドラフトには当初から反対しており、今後の漢字コードの方針を決めるため、WG 2は CJK-JRG (Joint Research Group) と呼ばれるグループを別途設置し、そこで引き続き検討することにした。
このような公的機関の動きとは別に、1987年頃からXeroxのJoe BeckerとLee Collinsは、後にUnicodeと呼ばれるようになる、世界中の文字を統一して扱える文字コードを開発していた。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の一本化が図られることになった。また中国およびユニコードコンソーシアムの要請により、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統合漢字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となり、以後UnicodeとISO/IEC 10646とは歩調を合わせて改訂されていくことになる。
Unicodeのバージョンは、メジャーバージョン (the major version)、マイナーバージョン (the minor version)、アップデートバージョン (the update version) の3つの部分から構成され、ピリオドでつなげて表示される[12]。ただし、マイナーバージョン及びアップデートバージョンについては0の場合には省略して表示されることもある。メジャーバージョンはレパートリーの追加のような重要な変更が行われたときに改定される。Unicodeのドキュメントは書籍形態と電子版ドキュメント形態の両方で公表され、どちらもUnicodeについての正式なドキュメントであるとされている。新たなバージョンがリリースされたときは新たなドキュメントが公表されるが、書籍として刊行されるのはメジャーバージョンが改定された場合および重要なマイナーバージョンの改定があった場合のみである。書籍版のバージョン1.0は、2巻に分けて刊行され、統合漢字部分を除いた第1巻は1991年10月に、統合漢字部分の第2巻は1992年6月に刊行された。そのため第1巻のみのものをUnicode 1.0.0、第2巻を含めたものをUnicode 1.0.1と呼ぶことがある。
Unicodeのそれぞれのバージョン番号とその制定年月日、収録文字数他の特徴は以下の通りである。
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
[27]
[28]
[29]
[30]
[31]
[32]
[33]
[34]
[35]
[36]
[37]
[38]
[39]
[40]
[41]
[42]
[43]
Unicodeのバージョンには、上記のような「Unicodeの規格全体に付けられたバージョン」の他に「Unicodeを構成する個々の要素の規格に付けられたバージョン」が存在する。これに該当するものとしては、Unicodeを構成する各面ごとに付けられたバージョンや、Unicodeに収録されないこととされたスクリプトのリスト (NOR = Not The Roadmap) に付けられたバージョン、規格の一部を構成するUnicode Technical Note(Unicode技術ノート)、Unicode Technical Report(Unicode技術報告)、Unicode Technical Standard(Unicode技術標準)のバージョンなどが存在する。
3.5[80]
Unicodeは同一のコードでもバージョンが変わったとき完全に異なった文字を定義し直したことがある。
そのうち最大のものがUnicode 2.0での「ハングルの大移動」である。これはUnicode 1.1までで定義されていたハングルの領域を破棄し、新しいハングルの領域を別の位置に設定し、破棄された領域には別の文字の領域を割り当てることとなった。その後、Unicode 3.0では、従来ハングルが割り当てられていた領域にCJK統合漢字拡張A、ついでUnicode 4.0で六十四卦が割り当てられた。このように、Unicode 1.1以前でハングルを記述した文書とUnicode 2.0以降でCJK統合漢字拡張Aを記述した文書には互換性がない[注釈 7]。JCS委員長の芝野耕司はUnicodeに日本語の漢字を収録させる議論の中で、ハングル大移動について「韓国のとった滅茶苦茶な行動」と述べている[298]。
Shift JIS では JIS X 0201 における(日本や中国の通貨の)円記号 "¥" が 0x5C に置かれている。これを Unicode のマッピングに合わせると YEN SIGN (U+00A5) にマップされる。しかし、0x5C は ASCII ではバックスラッシュ "\" に相当し、C言語などでエスケープ文字として使われる事から、この文字のコードを変更すると問題が起きる。極端な例として、0x5C が円記号とエスケープ文字の両方の目的で使われているケース(たとえばC言語のprintf関数で printf("¥¥%d¥n", price); など)も考えられる。
printf("¥¥%d¥n", price);
そのため、Unicode を利用するアプリケーションでは、U+007F 以下のコードに関しては移動させないという暗黙のルールができている。
そうなると、Unicode 環境では円記号がバックスラッシュの表示に変わってしまうように思われるが、これは日本語用のフォントデータの 0x5C の位置には円記号の字形を当ててしまうことで対処している。これによって、日本語環境での表示上は 0x5C の位置で円記号を用いることができる。
この問題は日本語環境に限ったことではない。もともと ISO 646 上では、0x5C を含む数種の文字は自由領域(バリアント)として各国での定義を認めていた。そのため、日本語以外でも ASCII でバックスラッシュに相当するコードに異なる記号を当てているケースが多い。例えば、韓国では通貨のウォン記号 (WON SIGN, U+20A9, "₩")、デンマークやノルウェーではストローク付きO (LATIN CAPITAL LETTER O WITH STROKE, U+00D8, "Ø") などである。(後者は後の時代には、0x5C はバックスラッシュのままとし、ISO 8859 シリーズを用いることが一般化した。)
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, "~") に割り当てたため不整合が生じた。
この結果、macOS 等の JIS X 0221 準拠の Shift_JIS ⇔ Unicode 変換テーブルをもつ処理系と Windows との間で Unicode データをやり取りする場合、文字化けを起こすことになる。そこで Windows 以外の OS 上で動くアプリケーションの中には、CP932 という名前でマイクロソフト仕様の Shift_JIS コード体系を別途用意して対応しているケースが多い。この原因とされている Unicode 仕様書の例示字形の問題に関しては、波ダッシュ#Unicodeに関連する問題を参照。
上記に加え、マイクロソフト仕様は変換時にも問題が起こる文字を以下に示す。
1-29
0x815c
U+2014
U+2015
1-33
0x8160
U+301C
U+FF5E
1-34
0x8161
U+2016
U+2225
1-61
0x817c
U+2212
U+FF0D
1-81
0x8191
U+00A2
U+FFE0
1-82
0x8192
U+00A3
U+FFE1
2-44
0x81ca
U+00AC
U+FFE2
このうちセント・ポンド・否定については、IBMのメインフレームではShift_JISを拡張してこれらの半角版をコードポイント 0xFD-0xFF に割り当て、別途JIS X 0208からマップされた位置に全角版を収録していたため、WindowsをIBMメインフレームの端末として用いるケースを想定したといわれている[要出典]。
なお、Windows Vista や Microsoft Office 2007 に付属する IME パッドの文字一覧における JIS X 0213 の面区点の表示は、上記の文字についても JIS で規定されているものと同じマッピングを使用している[要出典]。
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 2C000-2CFFF 2D000-2DFFF 2E000-2EFFF 2F000-2FFFF
30000-30FFF 31000-31FFF 32000-32FFF 33000-33FFF 34000-34FFF 35000-35FFF 36000-36FFF 37000-37FFF 38000-38FFF 39000-39FFF 3A000-3AFFF 3B000-3BFFF 3C000-3CFFF 3D000-3DFFF 3E000-3EFFF 3F000-3FFFF
E0000-E0FFF
Basic Latin
Latin-1 Supplement
Latin Extended-A
Latin Extended-B
IPA Extensions
Spacing Modifier Letters
Combining Diacritical Marks
Greek and Coptic
Cyrillic
Cyrillic Supplement
Armenian
Hebrew
Arabic
Syriac
Arabic Supplement
Thaana
NKo
Samaritan
Mandaic
Syriac Supplement
Arabic Extended-B
Arabic Extended-A
Devanagari
Bengali
Gurmukhi
Gujarati
Oriya
Tamil
Telugu
Kannada
Malayalam
Sinhala
Thai
Lao
Tibetan
Myanmar
Georgian
Hangul Jamo
Ethiopic
Ethiopic Supplement
Cherokee
Unified Canadian Aboriginal Syllabics
Ogham
Runic
Tagalog
Hanunoo
Buhid
Tagbanwa
Khmer
Mongolian
Unified Canadian Aboriginal Syllabics Extended
Limbu
Tai Le
New Tai Lue
Khmer Symbols
Buginese
Tai Tham
Combining Diacritical Marks Extended
Balinese
Sundanese
Batak
Lepcha
Ol Chiki
Cyrillic Extended-C
Georgian Extended
Sundanese Supplement
Vedic Extensions
Phonetic Extensions
Phonetic Extensions Supplement
Combining Diacritical Marks Supplement
Latin Extended Additional
Greek Extended
General Punctuation
Superscripts and Subscripts
Currency Symbols
Combining Diacritical Marks for Symbols
Letterlike Symbols
Number Forms
Arrows
Mathematical Operators
Miscellaneous Technical
Control Pictures
Optical Character Recognition
Enclosed Alphanumerics
Box Drawing
Block Elements
Geometric Shapes
Miscellaneous Symbols
Dingbats
Miscellaneous Mathematical Symbols-A
Supplemental Arrows-A
Braille Patterns
Supplemental Arrows-B
Miscellaneous Mathematical Symbols-B
Supplemental Mathematical Operators
Miscellaneous Symbols and Arrows
Glagolitic
Latin Extended-C
Coptic
Georgian Supplement
Tifinagh
Ethiopic Extended
Cyrillic Extended-A
Supplemental Punctuation
CJK Radicals Supplement
Kangxi Radicals
Ideographic Description Characters
CJK Symbols and Punctuation
Hiragana
Katakana
Bopomofo
Hangul Compatibility Jamo
Kanbun
Bopomofo Extended
CJK Strokes
Katakana Phonetic Extensions
Enclosed CJK Letters and Months
CJK Compatibility
CJK Unified Ideographs Extension A
Yijing Hexagram Symbols
CJK Unified Ideographs
Yi Syllables
Yi Radicals
Lisu
Vai
Cyrillic Extended-B
Bamum
Modifier Tone Letters
Latin Extended-D
Syloti Nagri
Common Indic Number Forms
Phags-pa
Saurashtra
Devanagari Extended
Kayah Li
Rejang
Hangul Jamo Extended-A
Javanese
Myanmar Extended-B
Cham
Myanmar Extended-A
Tai Viet
Meetei Mayek Extensions
Ethiopic Extended-A
Latin Extended-E
Cherokee Supplement
Meetei Mayek
Hangul Syllables
Hangul Jamo Extended-B
High Surrogates
High Private Use Surrogates
Low Surrogates
Private Use Area
CJK Compatibility Ideographs
Alphabetic Presentation Forms
Arabic Presentation Forms-A
Variation Selectors
Vertical Forms
Combining Half Marks
CJK Compatibility Forms
Small Form Variants
Arabic Presentation Forms-B
Halfwidth and Fullwidth Forms
Specials
Linear B Syllabary
Linear B Ideograms
Aegean Numbers
Ancient Greek Numbers
Ancient Symbols
Phaistos Disc
Lycian
Carian
Coptic Epact Numbers
Old Italic
Gothic
Old Permic
Ugaritic
Old Persian
Deseret
Shavian
Osmanya
Osage
Elbasan
Caucasian Albanian
Vithkuqi
Linear A
Latin Extended-F
Cypriot Syllabary
Imperial Aramaic
Palmyrene
Nabataean
Hatran
Phoenician
Lydian
Meroitic Hieroglyphs
Meroitic Cursive
Kharoshthi
Old South Arabian
Old North Arabian
Manichaean
Avestan
Inscriptional Parthian
Inscriptional Pahlavi
Psalter Pahlavi
Old Turkic
Old Hungarian
Hanifi Rohingya
Rumi Numeral Symbols
Yezidi
Arabic Extended-C
Old Sogdian
Sogdian
Old Uyghur
Chorasmian
Elymaic
Brahmi
Kaithi
Sora Sompeng
Chakma
Mahajani
Sharada
Sinhala Archaic Numbers
Khojki
Multani
Khudawadi
Grantha
Newa
Tirhuta
Siddham
Modi
Mongolian Supplement
Takri
Ahom
Dogra
Warang Citi
Dives Akuru
Nandinagari
Zanabazar Square
Soyombo
Unified Canadian Aboriginal Syllabics Extended-A
Pau Cin Hau
Bhaiksuki
Marchen
Masaram Gondi
Gunjala Gondi
Makasar
Kawi
Lisu Supplement
Tamil Supplement
Cuneiform
Cuneiform Numbers and Punctuation
Early Dynastic Cuneiform
Cypro-Minoan
Egyptian Hieroglyphs
Egyptian Hieroglyph Format Controls
Anatolian Hieroglyphs
Bamum Supplement
Mro
Bassa Vah
Pahawh Hmong
Medefaidrin
Miao
Ideographic Symbols and Punctuation
Tangut
Tangut Components
Khitan Small Script
Tangut Supplement
Kana Extended-B
Kana Supplement
Kana Extended-A
Small Kana Extension
Nushu
Duployan
Shorthand Format Controls
Znamenny Musical Notation
Byzantine Musical Symbols
Musical Symbols
Ancient Greek Musical Notation
Kaktovik Numerals
Mayan Numerals
Tai Xuan Jing Symbols
Counting Rod Numerals
Mathematical Alphanumeric Symbols
Sutton SignWriting
Latin Extended-G
Glagolitic Supplement
Cyrillic Extended-D
Nyiakeng Puachue Hmong
Toto
Wancho
Nag Mundari
Ethiopic Extended-B
Mende Kikakui
Adlam
Indic Siyaq Numbers
Ottoman Siyaq Numbers
Arabic Mathematical Alphabetic Symbols
Mahjong Tiles
Domino Tiles
Playing Cards
Enclosed Alphanumeric Supplement
Enclosed Ideographic Supplement
Miscellaneous Symbols and Pictographs
Emoticons
Ornamental Dingbats
Transport and Map Symbols
Alchemical Symbols
Geometric Shapes Extended
Supplemental Arrows-C
Supplemental Symbols and Pictographs
Chess Symbols
Symbols and Pictographs Extended-A
Symbols for Legacy Computing
CJK Unified Ideographs Extension B
CJK Unified Ideographs Extension C
CJK Unified Ideographs Extension D
CJK Unified Ideographs Extension E
CJK Unified Ideographs Extension F
CJK Unified Ideographs Extension I
CJK Compatibility Ideographs Supplement
CJK Unified Ideographs Extension G
CJK Unified Ideographs Extension H
Tags
Variation Selectors Supplement
Supplementary Private Use Area-A
Supplementary Private Use Area-B