| エイリアス |
|
|---|---|
| 言語 | 168 個のスクリプト(リスト) |
| 標準 | ユニコード標準 |
| エンコード形式 | (珍しい) (廃止) |
| 先行 | ISO/IEC 8859など |
Unicode(Unicode標準、TUS [ 1 ] [ 2 ]とも呼ばれる)は、Unicodeコンソーシアムが管理する文字符号化規格であり、世界中のあらゆる書記体系のテキストをデジタル化して使用できるように設計されています。バージョン17.0 [ A ]では、日常、文学、学術、技術のさまざまな文脈で使用される 159,801の文字と172のスクリプト[ 3 ]が定義されています。
Unicodeは、異なるロケールや異なるコンピュータアーキテクチャで使用されていた、互換性のない無数の文字セットという従来の環境をほぼ置き換えました。これらの文字セットの全レパートリーに加え、多くの追加文字が単一のUnicodeセットに統合されました。Unicodeは、ほとんどのウェブページを含むインターネット上のテキストの大部分をエンコードするために使用されており、関連するUnicodeサポートは現代のソフトウェア開発において一般的な考慮事項となっています。Unicodeは最終的に110万文字以上の文字をエンコードできます。
Unicode文字レパートリーはISO/IEC 10646と同期しており、各文字はコード単位で同一です。しかし、Unicode標準は文字が割り当てられているレパートリーだけではありません。開発者や設計者を支援するため、この標準では図表や参照データに加え、様々な文字体系に固有の概念を解説し、実装のためのガイダンスを提供する付録も提供しています。これらの付録で扱われているトピックには、文字の正規化、文字の合成と分解、照合、方向性などがあります。[ 4 ]
Unicodeは3,790種類の絵文字をエンコードしており、その継続的な開発は標準規格の一部としてコンソーシアムによって行われています。[ 5 ] Unicodeの広範な採用は、日本国外での絵文字の初期の普及に大きく貢献しました。
Unicodeテキストは、標準規格で抽象化された文字コードをバイト列に変換する方法を定義する、複数のエンコーディングのいずれかを使用してバイナリデータとして処理および保存されます。Unicode規格自体は、UTF-8、UTF-16、[ a ]、UTF-32の3つのエンコーディングを定義していますが、他にもいくつかのエンコーディングが存在します。UTF-8は、 ASCIIとの下位互換性があるため、圧倒的に最も広く使用されています。
Unicodeは当初、それまでに設計されたすべてのテキストエンコーディングの限界を克服する意図で設計されました。つまり、各エンコーディングはそれぞれのコンテキストでの使用に依存していましたが、他のエンコーディングとの互換性は特に期待されていませんでした。実際、選択された2つのエンコーディングを併用すると、しばしば全く機能せず、一方のエンコーディングでエンコードされたテキストがもう一方のエンコーディングでは文字化けとして解釈されることもありました。ほとんどのエンコーディングは、少数の文字体系(多くの場合、主に特定の文字体系とラテン文字)間の相互運用性を促進するために設計されたものであり、多数の文字体系間の相互運用性は考慮されておらず、また、サポートされているすべての文字体系が一貫した方法で扱われることも想定されていませんでした。
Unicodeの根底にある理念は、文字の単なる異体字として扱われるグラフィカルな区別ではなく、基礎となる文字(グラフィカル素およびグラフィカル素に類似した単位)を符号化することを目指しています。グラフィカルな区別は、書体、マークアップ、その他の手段によって最も適切に処理されます。漢字における綴り字の異体処理など、特に複雑なケースでは、どの差異が独自の符号化を正当化するのか、そしてどの差異が他の文字のグラフィカルな異体なのかについて、かなりの意見の相違があります。
最も抽象的なレベルでは、Unicodeは各文字にコードポイントと呼ばれる一意の番号を割り当てています。サイズ、形状、スタイルなど、視覚的な表現に関する多くの問題は、Webブラウザやワードプロセッサなど、実際にテキストをレンダリングするソフトウェアの裁量に委ねられています。しかし、迅速な導入を促進するという目的もあり、この当初のモデルのシンプルさは時間の経過とともに幾分複雑になり、規格の開発過程で様々な実用的な譲歩がなされてきました。
最初の256個のコードポイントはISO/IEC 8859-1規格に準拠しており、西欧文字で既に記述されているテキストの変換を容易にすることを目的としています。従来の異なるエンコーディングによる区別を維持し、それらのエンコーディングとUnicode間の変換において情報の損失がないようにするため、外観と機能の両方において他の文字とほぼ同一の多くの文字に、異なるコードポイントが割り当てられています。例えば、半角および全角フォームブロックは、ラテンアルファベットの意味を完全に複製しています。これは、従来のCJKエンコーディングには「全角」(CJK文字の幅に一致)と「半角」(通常のラテン文字に一致)の両方の文字が含まれていたためです。
Unicodeの起源は1980年代、ゼロックス社の文字コード標準(XCCS)に関係する人々のグループにまで遡ります。 [ 6 ] 1987年、ゼロックス社の従業員であるジョー・ベッカーは、アップル社の従業員であるリー・コリンズとマーク・デイビスと共に、ユニバーサル文字セット作成の実用性について調査を始めました。[ 7 ]ピーター・フェンウィックとデイブ・オプスタッドからの助言も得て、[ 6 ]ベッカーは1988年8月に「国際的/多言語テキスト文字エンコーディングシステム、暫定的にUnicodeと呼ばれる」という提案草案を発表しました。彼は「『Unicode』という名前は、唯一無二で統一された、ユニバーサルなエンコーディングを示唆することを意図している」と説明しています。[ 6 ]
この文書「Unicode 88」の中で、ベッカーは16ビット文字を使ったスキームを概説した。 [ 6 ]
Unicodeは、世界中で利用でき、信頼性の高いテキストエンコーディングの必要性に応えることを目的としています。Unicodeは、世界中のあらゆる言語の文字を包含するために16ビットに拡張された「ワイドボディASCII」と大まかに説明できます。適切に設計された場合、1文字あたり16ビットは、この目的には十分すぎるほどです。
この設計上の決定は、「現代」で使用される文字と文字のみがエンコードを必要とするという仮定に基づいて行われました。[ 6 ]
Unicodeは、過去の遺物を保存することよりも、将来の有用性を確保することを優先しています。Unicodeはまず第一に、現代のテキスト(例えば、1988年に世界中で印刷されたすべての新聞と雑誌の合計)に掲載されている文字を対象としていますが、その文字数は2の14乗= 16,384文字をはるかに下回ることは間違いありません。これらの現代用文字を除く他の文字はすべて、廃止または希少と定義できます。これらの文字は、一般的に有用なUnicodeの公開リストを混雑させるよりも、私的使用のための登録に適しています。
1989年初頭、Unicodeワーキンググループは拡大し、MetaphorのKen WhistlerとMike Kernaghan、Research Libraries GroupのKaren Smith-YoshimuraとJoan Aliprand、 Sun MicrosystemsのGlenn Wrightが参加した。Research Libraries Groupは東アジアの文字セットに関する既存のソリューションを持っており、それがUnicode文字セットへの入力の1つとなった。[ 7 ] 1990年には、 MicrosoftのMichel SuignardとAsmus Freytag 、NeXTのRick McGowanもグループに加わった。1990年末までに、既存の標準の再マッピング作業の大半が完了し、Unicodeの最終レビュードラフトが完成した。
ユニコードコンソーシアムは1991年1月3日にカリフォルニア州で設立され[ 8 ] 、同年10月にユニコード規格の第1巻が出版されました。漢字を追加した第2巻は1992年6月に出版されました。
1996年、Unicode 2.0でサロゲート文字機構が実装され、Unicodeは16ビットに制限されなくなりました。これによりUnicodeのコード空間は100万コードポイント以上に拡大し、エジプトの象形文字などの多くの歴史的文字や、標準規格への組み込みが想定されていなかった数千の稀少文字や廃止文字のエンコードが可能になりました。これらの文字の中には、稀少なCJK文字も含まれており、その多くは主に固有名詞に使用されているため、Unicodeの当初のアーキテクチャが想定していたよりも、普遍的なエンコードにとってはるかに重要なものとなっています。[ 9 ]
Unicodeコンソーシアムは、Unicodeの開発を調整する非営利団体です。正会員には、Adobe、Apple、Google、IBM、Meta(旧Facebook)、Microsoft、Netflix、SAPなど、テキスト処理標準に関心を持つ主要なコンピュータソフトウェアおよびハードウェア企業のほとんど(およびその他少数)が含まれています。[ 10 ]
長年にわたり、いくつかの国や政府機関がUnicodeコンソーシアムの会員となってきました。[ 10 ]
コンソーシアムは、既存の文字エンコード方式を最終的に Unicode とその標準 Unicode 変換形式 (UTF) 方式に置き換えるという野心的な目標を掲げています。これは、既存の方式の多くはサイズと範囲が制限されており、多言語環境と互換性がないためです。
ユニコードブルドッグ賞はユニコードの開発に影響を与えたとみなされる人々に贈られ、受賞者には小林達夫、トーマス・ミロ、ルーズベ・プルナダー、ケン・ルンデ、マイケル・エバーソンなどが含まれています。[ 11 ]

2025年9月現在、Unicodeには合計172 [ 12 ]の文字(アルファベット、アブギダ、音節文字)が含まれており、現在使用されている主要な表記体系のほとんどをカバーしています。 [ 13 ] [ 14 ]まだエンコードされていない文字、特に歴史的、典礼的、学術的な文脈で使用されている文字が残っています。また、既にエンコードされている文字への文字の追加や、特に数学や音楽用の記号の追加も行われています。
Unicodeロードマップ委員会(マイケル・エバーソン、リック・マクゴーワン、ケン・ウィスラー、VS・ウママヘスワラン)[ 15 ]は、エンコードの候補または潜在的候補となっている文字とそれらの暫定的なコードブロック割り当てのリストを、 UnicodeコンソーシアムのウェブサイトのUnicodeロードマップ[ 16 ]のページで管理している。ロードマップ上の一部の文字、例えば女真文字や契丹大文字についてはエンコードの提案がなされており、承認プロセスが進められている。ヌミディア文字やロンゴロンゴ文字など、他の文字についてはまだ提案がなされておらず、文字のレパートリーなどの詳細について関係するユーザーコミュニティからの合意を待っている。
まだ Unicode に含まれていない (例:テングワール)、または実世界の使用がないために Unicode に含める資格がない (例:クリンゴン語) 現代の発明文字の一部は、非公式だが広く使用されている私的使用の市外局番の割り当てとともに、ConScript Unicode レジストリにリストされています。
中世の特殊なラテン文字に焦点を当てた「 中世Unicodeフォント・イニシアチブ」も存在します。これらの提案の一部は既にUnicodeに含まれています。
スクリプト・エンコーディング・イニシアティブ(SEI)[ 17 ]は、カリフォルニア大学バークレー校のデボラ・アンダーソンが立ち上げたプロジェクトで、まだ標準にエンコードされていない文字の提案に資金を提供することを目的に2002年に設立されました。現在はアヌーシャ・ホセインが運営しており、近年では標準への追加提案の主要な情報源となっています。[ 18 ] SEIはUnicodeコンソーシアムやISO/IEC 10646標準化プロセスと連携していますが、独立して運営されており、正式な提案の準備に必要な技術的、言語的、歴史的研究をサポートしています。SEIは、プロジェクトのウェブサイトで、まだUnicode標準にエンコードされていない文字のデータベースを管理しています。[ 19 ]
Unicodeコンソーシアムは、 Unicode標準の最初の発行に続いてISOと共同で共通のレパートリーを開発しました。UnicodeとISOのUniversal Coded Character Set(UCS)は、同一の文字名とコードポイントを使用しています。しかし、Unicode版はISO版とは2つの重要な点で異なります。
UCS は単純な文字マップですが、Unicode では異なるプラットフォームや言語間の相互運用性を実現するために必要なルール、アルゴリズム、プロパティを規定しています。そのため、Unicode 標準には、ビット単位のエンコード、照合、レンダリングなどの詳細なトピックを網羅した、より多くの情報が含まれています。また、双方向テキストのサポートに必要な文字プロパティを含む包括的な文字プロパティ カタログや、実装者を支援するための視覚的なチャートと参照データ セットも提供しています。以前は、Unicode 標準は完全なコア仕様、標準の付録[注 1 ]、およびコード チャートを含む印刷本として販売されていました。ただし、2006 年に発行されたバージョン 5.0 が、このように印刷された最後のバージョンでした。バージョン 5.2 からは、オンデマンド印刷のペーパーバックとして発行されるコア仕様のみを購入できるようになりました。[ 20 ]一方、全文は Unicode の Web サイトで無料の PDF として公開されています。
この公開方法の実際的な理由は、UCSとUnicodeの2つ目の大きな違い、つまり更新版のリリース頻度と新規文字の追加頻度を浮き彫りにしています。Unicode規格は毎年定期的に拡張版をリリースしており、暦年内に複数のバージョンがリリースされることもあれば、予定されていたリリースが延期されるケースも稀にあります。例えば、バージョン13.0が公開されてから1か月後の2020年4月、UnicodeコンソーシアムはCOVID-19パンデミックの影響により、バージョン14.0のリリース予定日を6か月延期し、2021年9月にすると発表しました。
これまでに、 Unicode標準は以下のバージョンが公開されています。文字レパートリーに変更がない更新バージョンは、3番目の数字(例:バージョン4.0.1)で示され、以下の表では省略されています。[ 21 ]
| バージョン | 日付 | 出版物(書籍、テキスト) | UCS版 | 合計 | 詳細 | |
|---|---|---|---|---|---|---|
| スクリプト | 文字[ b ] | |||||
| 1.0.0 [ 22 ] | 1991年10月 | ISBN 0-201-56788-1(第1巻) | 該当なし | 24 | 7129 | カバーされている初期の文字:アラビア語、アルメニア語、ベンガル語、ボポモフォ、キリル文字、デーヴァナーガリー文字、グルジア語、ギリシャ語とコプト語、グジャラート語、グルムキー語、ハングル語、ヘブライ語、ひらがな、カンナダ語、カタカナ、ラオス語、ラテン語、マラヤーラム語、オディア語、タミル語、テルグ語、タイ語、チベット語 |
| 1.0.1 [ 23 ] | 1992年6月 | ISBN 0-201-60845-6(第2巻) | 25 | 28 327+21 204−6 | 最初の20,902個のCJK統合漢字 | |
| 1.1 [ 24 ] | 1993年6月 | 該当なし | ISO/IEC 10646 -1:1993 | 24 | 34 168+5963−9 | 33文字が制御文字として再分類された。ハングル4,306音節、チベット語が削除された。 |
| 2.0 [ 25 ] | 1996年7月 | ISBN 0-201-48345-9 | 25 | 38,885+11 373−6656 | ハングル音節の元のセットを削除し、新しい場所に 11,172 個のハングル音節の新しいセットを追加し、チベット語を新しい場所に別の文字レパートリーで追加し、代理文字のメカニズムを定義し、第 15 面と第 16 面の私的使用領域を割り当てました。 | |
| 2.1 [ 26 ] | 1998年5月 | 該当なし | 38 887+2 | U+20AC €ユーロ記号、 U+FFFC オブジェクト置換文字[ 26 ] | ||
| 3.0 [ 27 ] | 1999年9月 | ISBN 0-201-61633-5 | ISO/IEC 10646-1:2000 | 38 | 49 194+10 307 | チェロキー語、ゲズ語、クメール語、モンゴル語、ビルマ語、オガム語、ルーン文字、シンハラ語、シリア語、ターナ語、カナダ先住民の音節文字、イ語の音節、点字パターン |
| 3.1 [ 28 ] | 2001年3月 | 該当なし | ISO/IEC 10646-1:2000 [ d ] ISO/IEC 10646-2:2001 | 41 | 94 140+44 946 | デゼレト、ゴシック体と古代イタリック体、西洋音楽とビザンチン音楽の記号セット、追加のCJK統合表意文字42,711個 |
| 3.2 [ 29 ] | 2002年3月 | 45 | 95 156+1016 | フィリピン文字 (ブヒド、ハヌヌー、タガログ、タグバンワ)、数学記号 | ||
| 4.0 [ 30 ] | 2003年4月 | ISBN 0-321-18578-1 | ISO/IEC 10646:2003 | 52 | 96 382+1226 | キプロス文字、リンブー文字、線文字B、オスマニヤ文字、シャーヴィア文字、タイ・レ文字、ウガリット文字、六十四卦 |
| 4.1 [ 31 ] | 2005年3月 | 該当なし | 59 | 97 655+1273 | ブギス語、グラゴル語、カローシュティー語、新タイ・ルー語、古代ペルシア語、シレット・ナグリ語、ティフィナグ語、コプト語がギリシャ語から分離し、古代ギリシャの数字と音楽記号、初めて名前の付いた文字列が導入されました。[ 32 ] | |
| 5.0 [ 33 ] | 2006年7月 | ISBN 0-321-48091-0 | 64 | 99 024+1369 | バリ文字、楔形文字、ンコ文字、パグスパ文字、フェニキア文字[ 34 ] | |
| 5.1 [ 35 ] | 2008年4月 | 該当なし | 75 | 100 648+1624 | カリア語、チャム語、カヤー・リ語、レプチャ語、リュキア語、リディア語、オル・チキ語、レジャン語、サウラシュトラ語、スンダ語、ヴァイ語、ファイストス・ディスクの記号セット、麻雀牌、ドミノ牌、ビルマ語への追加、筆写略語、U+1E9E ẞラテン大文字シャープS | |
| 5.2 [ 36 ] | 2009年10月 | ISBN 978-1-936213-00-9 | 90 | 107 296+6648 | アヴェスター語、バムム語、ガーディナーのエジプト象形文字一覧、帝国アラム語、碑文パフラヴィー語、碑文パルティア語、ジャワ語、カイティ語、リス語、ミーテイ・マエク語、古代南アラビア語、古代テュルク語、サマリア語、タイ・タム語およびタイ・ヴィエット語、追加のCJK統合表意文字、古代ハングルの字母、ヴェーダ・サンスクリット語 | |
| 6.0 [ 37 ] | 2010年10月 | ISBN 978-1-936213-01-6 | ISO/IEC 10646:2010 | 93 | 109 384+2088 | バタク文字、ブラーフミー文字、マンダ文字、トランプの記号、交通機関や地図の記号、錬金術の記号、顔文字、[ 38 ]その他のCJK統合表意文字 |
| 6.1 [ 39 ] | 2012年1月 | ISBN 978-1-936213-02-3 | ISO/IEC 10646:2012 | 100 | 110 116+732 | チャクマ、メロイティック筆記体、メロイティック象形文字、ミャオ族、シャラダ、ソラ・ソンペン、およびタクリ |
| 6.2 [ 40 ] | 2012年9月 | ISBN 978-1-936213-07-8 | 110 117+1 | U+20BA ₺トルコリラ記号 | ||
| 6.3 [ 41 ] | 2013年9月 | ISBN 978-1-936213-08-5 | 110 122+5 | 5つの双方向書式設定文字 | ||
| 7.0 [ 42 ] | 2014年6月 | ISBN 978-1-936213-09-2 | 123 | 112,956+2834 | Bassa Vah、白人のアルバニア人、Duployan、Elbasan、Grantha、Khojki、Khudawadi、Linear A、Mahajani、Manichaean、Mende Kirakui、Modi、Mro、Nabatean、古北アラビア、Old Permic、Pahawh Hmong、Palmyrene、Pau Cin Hau、パフラヴィー詩篇、シッダム、ティルフタ、ワランシティ、および絵文字 | |
| 8.0 [ 43 ] | 2015年6月 | ISBN 978-1-936213-10-8 | ISO/IEC 10646:2014 | 129 | 120 672+7716 | アホム文字、アナトリア象形文字、ハトラ文字、ムルタニ文字、古代ハンガリー文字、手話、追加のCJK統合表意文字、チェロキー語の小文字、5つの肌の色修飾子 |
| 9.0 [ 46 ] | 2016年6月 | ISBN 978-1-936213-13-9 | 135 | 128 172+7500 | Adlam、Bhaiski、Marchen、Newa、Osage、Tangut、 72 絵文字[ 47 ] | |
| 10.0 [ 48 ] | 2017年6月 | ISBN 978-1-936213-16-0 | ISO/IEC 10646:2017 | 139 | 136 690+8518 | ザナバザール広場、ソヨンボ、マサラム・ゴンディ、ヌーシュ文字、ヘンタイガナ、7,494 CJK統合表意文字、56 絵文字、U+20BF ₿ビットコイン記号 |
| 11.0 [ 49 ] | 2018年6月 | ISBN 978-1-936213-19-1 | 146 | 137 374+684 | ドグラ文字、グルジア語ムタヴルリ大文字、グンジャラ・ゴンディー文字、ハニーフィー文字、ロヒンギャ文字、インド諸語シヤーク数字、マカッサル文字、メデファイドリン文字、古代ソグド文字とソグド文字、マヤ数字、5つのCJK統合表意文字、シャンチーと星評価の記号、145個の絵文字 | |
| 12.0 [ 50 ] | 2019年3月 | ISBN 978-1-936213-22-1 | 150 | 137,928+554 | エリュマイ語、ナンディナガリ文字、ニャイアケン・プアチュエ・モン語、ワンチョ文字、ミャオ文字、ひらがなとカタカナの小文字、タミル語の歴史的分数と記号、パーリ語のラオ文字、エジプト語とウガリット語の翻字のラテン文字、象形文字の書式コントロール、61個の絵文字 | |
| 12.1 [ 51 ] | 2019年5月 | ISBN 978-1-936213-25-2 | 137,929+1 | U+32FF ㋿元号 令和 | ||
| 13.0 [ 52 ] | 2020年3月 | ISBN 978-1-936213-26-9 | ISO/IEC 10646:2020 | 154 | 143 859+5930 | コーラス文字、ディヴェス・アクル文字、契丹小文字、ヤジディ文字、4,969個のCJK表意文字、ハウサ語、ウォロフ語、その他のアフリカ言語の表記に使用されるアラビア文字の追加、パキスタンのヒンドゥ教とパンジャブ語の表記に使用される追加、広東語に使用されるボポモフォの追加、クリエイティブ・コモンズ・ライセンス・シンボル、テレテキストおよび家庭用コンピュータシステムとの互換性のためのグラフィック文字、55個の絵文字 |
| 14.0 [ 54 ] | 2021年9月 | ISBN 978-1-936213-29-0 | 159 | 144 697+838 | Toto、Cypro-Minoan、Vithkuqi、Old Uyghur、Tangsa、拡張 IPA、アフリカ全土およびイラン、パキスタン、マレーシア、インドネシア、ジャワ、ボスニアの言語で使用するためのアラビア文字の追加、敬語とコーランの使用の追加、北米、フィリピン、インド、モンゴルでのサポート言語の追加、U+20C0 ⃀ SOM SIGN、Znamenny Musical表記法、絵文字 37 個 | |
| 15.0 [ 55 ] | 2022年9月 | ISBN 978-1-936213-32-0 | 161 | 149 186+4489 | カウィ文字とムンダリ文字、20個の絵文字、4,192個のCJK表意文字、エジプトの象形文字の制御文字 | |
| 15.1 [ 56 ] | 2023年9月 | ISBN 978-1-936213-33-7 | 149 813+627 | 追加のCJK表意文字 | ||
| 16.0 [ 57 ] | 2024年9月 | ISBN 978-1-936213-34-4 | 168 | 154,998+5185 | ガライ、グルン・ケマ、キラット・ライ、オル・オナル、スヌワール、トドゥリ、トゥル・ティガラリ、 7 絵文字、 3,995 エジプト象形文字 | |
| 17.0 [ 58 ] | 2025年9月 | ISBN 978-1-936213-35-1 | 172 | 159 801+4803 | Beria Erfe、Tai Yo、Sidetic、Tolong Siki、U+20C1 SAUDI RIYAL SIGN、 7 絵文字、 4,316 CJK 統一表意文字 | |
ユニコード標準はコード空間を定義している:[ 59 ]コードポイントと呼ばれる整数の列[ 60 ] 0から1 114 111、標準ではU+0000 – U+10FFFFと表記されます。[ 61 ]コードスペースは、Unicode標準の体系的でアーキテクチャに依存しない表現です。実際のテキストは、 UTF-8などのいくつかのUnicodeエンコーディングのいずれかを介してバイナリデータとして処理されます。
この規範的な記法では、2文字の接頭辞はU+常にコードポイントの前に付き、コードポイント自体は16進数で表記されます。[注 2 ]少なくとも4桁の16進数が常に表記され、必要に応じて先頭にゼロが付加されます。例えば、コードポイントU+00F7 ÷ DIVISION SIGNは先頭に2つのゼロが付加されますが、U+13254 𓉔 EGYPTIAN HIEROGLYPH O004 ( )はゼロが付加されません。[ 63 ]![]()
合計でコードスペース内の有効なコードポイントは1 112 064です。 [ 64 ]この数はUTF-16文字エンコーディングの制限から生じており、UTF-16はU+0000からU+FFFFの範囲の2 16 個のコードポイントをエンコードできますが、 U+D800からU+DFFFの範囲の2 11 個のコードポイントは、 U+10000からU+10FFFFの範囲の2 20 個のコードポイントをエンコードするためのサロゲートペアとして使用されます。
Unicodeコード空間は、0から16までの17のプレーンに分かれています。プレーン0は基本多言語プレーン(BMP)であり、最もよく使用される文字が含まれています。BMP内のすべてのコードポイントは、UTF-16エンコーディングでは単一のコードユニットとしてアクセスされ、UTF-8では1バイト、2バイト、または3バイトでエンコードされます。プレーン1から16(補助プレーン)のコードポイントは、 UTF-16ではサロゲートペアとしてアクセスされ、 UTF-8では4バイトでエンコードされます。
各プレーン内では、文字は関連する文字からなる名前付きブロック内に割り当てられます。ブロックのサイズは常に16の倍数で、多くの場合128の倍数ですが、それ以外は任意です。特定のスクリプトに必要な文字は、コード空間内の複数の異なる、場合によっては分離したブロックに分散している場合があります。
各コードポイントには分類が割り当てられており、コードポイントの「一般カテゴリ」プロパティとしてリストされています。最上位レベルでは、コードポイントは文字、記号、数字、句読点、記号、区切り文字、その他のいずれかに分類されます。各カテゴリの下には、各コードポイントがさらに細分化されます。ほとんどの場合、特定のコードポイントのすべての特性を適切に記述するには、他のプロパティを使用する必要があります。
| 一般カテゴリ(Unicode文字プロパティ)[ a ] | |||||
|---|---|---|---|---|---|
| 価値 | カテゴリー メジャー、マイナー | 基本型[ b ] | 割り当てられた文字[ b ] | カウント[ c ] (17.0現在) | 備考 |
| L , レター; LC , 大文字小文字(Lu、Ll、Lt のみ)[ d ] | |||||
| ルー | 文字、大文字 | グラフィック | キャラクター | 1,886 | |
| Ll | 文字(小文字) | グラフィック | キャラクター | 2,283 | |
| 中尉 | 文字、タイトルケース | グラフィック | キャラクター | 31 | 大文字の後に小文字が続く二重字(例:Dž、Lj、Nj、Dz) |
| ルム | 文字、修飾語 | グラフィック | キャラクター | 410 | 修飾文字 |
| ロ | 手紙、その他 | グラフィック | キャラクター | 141,062 | 表意文字または一文字アルファベットの文字 |
| M、マーク | |||||
| マン | マーク、非スペース | グラフィック | キャラクター | 2,059 | |
| マック | マーク、スペース結合 | グラフィック | キャラクター | 471 | |
| 自分 | マーク、同封 | グラフィック | キャラクター | 13 | |
| N、番号 | |||||
| ンド | 数値、小数点 | グラフィック | キャラクター | 770 | これらすべて、そしてこれらだけが数値型= De [ e ]です。 |
| Nl | 数字、文字 | グラフィック | キャラクター | 239 | 文字または文字のような記号で構成される数字(例:ローマ数字) |
| いいえ | 番号、その他 | グラフィック | キャラクター | 915 | 例:普通分数、上付き数字と下付き数字、20進数字 |
| P、句読点 | |||||
| パソコン | 句読点、接続詞 | グラフィック | キャラクター | 10 | 「_」などのスペースアンダースコア文字やその他のスペースタイ文字が含まれます。他の句読点文字とは異なり、これらは正規表現ライブラリによって「単語」文字として分類される場合があります。[ f ] |
| パッド | 句読点、ダッシュ | グラフィック | キャラクター | 27 | 複数のハイフン文字 を含む |
| 追伸 | 句読点、開く | グラフィック | キャラクター | 79 | 開き括弧文字 |
| ペ | 句読点、終了 | グラフィック | キャラクター | 77 | 閉じ括弧文字 |
| 円周率 | 句読点、最初の引用符 | グラフィック | キャラクター | 12 | 開始引用符。ASCIIの「中立」引用符は含まれません。使用方法によってはPsまたはPeのように動作する場合があります。 |
| Pf | 句読点、最後の引用符 | グラフィック | キャラクター | 10 | 閉じ引用符。使用法に応じてPsまたはPeのように動作する場合がある。 |
| ポー | 句読点、その他 | グラフィック | キャラクター | 641 | |
| S、シンボル | |||||
| 小 | 記号、数学 | グラフィック | キャラクター | 960 | 数学記号(例:+、-、=、×、÷、√、∊、≠ )。括弧と角括弧はPsおよびPeカテゴリに属し、含まれません。また、 !、*、-、/も含まれません。これらは数学演算子として頻繁に使用されますが、主に「句読点」とみなされます。 |
| Sc | 記号、通貨 | グラフィック | キャラクター | 64 | 通貨記号 |
| スク | 記号、修飾語 | グラフィック | キャラクター | 125 | |
| それで | シンボル、その他 | グラフィック | キャラクター | 7,468 | |
| Z、セパレーター | |||||
| Zs | 区切り文字、スペース | グラフィック | キャラクター | 17 | スペースを含みますが、TAB、CR、LFは含みません。これらはCcです。 |
| Zl | 区切り線 | 形式 | キャラクター | 1 | U+2028行区切り文字(LSEP) のみ |
| Zp | 区切り文字、段落 | 形式 | キャラクター | 1 | U+2029段落区切り文字(PSEP) のみ |
| C、その他 | |||||
| CC | その他、コントロール | コントロール | キャラクター | 65(決して変わらない)[ e ] | 名前なし、[ g ] <コントロール> |
| 参照 | その他、フォーマット | 形式 | キャラクター | 170 | ソフトハイフン、結合制御文字(ZWNJとZWJ )、双方向テキストをサポートする制御文字、言語タグ文字 が含まれます。 |
| Cs | その他、代理出産 | 代理母 | いいえ( UTF-16でのみ使用) | 2,048(決して変わりません)[ e ] | 名前なし、[ g ] <代理> |
| 共同 | その他、私的使用 | 私的使用 | キャラクター(ただし解釈は指定されていない) | 合計137,468(変更なし)[ e ](BMPに6,400 、プレーン15~16に131,068 ) | 名前なし、[ g ] <個人使用> |
| CN | その他、割り当てられていない | 非キャラクター | ない | 66(Unicodeコードポイントの範囲が拡張されない限り変更されません)[ e ] | 名前なし、[ g ] <非文字> |
| 予約済み | ない | 814,664 | 名前なし、[ g ] <予約済み> | ||
| |||||
そのU+D800~U+DBFFの範囲の1024ポイントは上位サロゲートコードポイントと呼ばれ、 U+DC00~U+DFFF(1024コードポイント(上位サロゲートコードポイント)は、下位サロゲートコードポイントと呼ばれます。上位サロゲートコードポイントに続いて下位サロゲートコードポイントがUTF-16でサロゲートペアを形成し、 U+FFFFより大きいコードポイントを表します。原則として、これらのコードポイントはそれ以外の用途には使用できませんが、実際には、特にUTF-16を使用しない場合は、このルールが無視されることがよくあります。
少数のコードポイントは文字に割り当てられないことが保証されていますが、第三者が独自の裁量でそれらを独自に使用することは可能です。これらの非文字は66個あります:U+FDD0~U+FDEFと、17のプレーンのそれぞれの最後の2つのコードポイント(例:U+FFFE、U+FFFF、U+1FFFE、U+1FFFF、...、U+10FFFE、U+10FFFF)。非文字の集合は安定しており、新しい非文字が定義されることはありません。[ 65 ]サロゲートと同様に、これらを使用できないという規則はしばしば無視されますが、バイトオーダーマークの動作では、 U+FFFEがテキストの最初のコードポイントになることは決してないと想定されています。サロゲートと非文字の除外により、1 111 998 個のコード ポイントが使用可能です。
私的使用コードポイントは割り当てられているとみなされますが、Unicode標準[ 66 ]では意図的に解釈が指定されておらず、そのようなコードポイントの交換には、送信者と受信者の間で解釈に関する独立した合意が必要になります。Unicodeコード空間には、3つの私的使用領域があります。
図形文字とは、Unicode標準によって特定の意味を持つように定義されている文字であり、目に見えるグリフ形状を持つか、目に見える空間を表すかのいずれかです。Unicode 17.0時点では、159,629個のグラフィック文字。
フォーマット文字は、目に見える形では現れないものの、隣接する文字の見た目や動作に影響を与える可能性のある文字です。例えば、U+200C ZERO WIDTH NON-JOINERとU+200D ZERO WIDTH JOINER は、隣接する文字のデフォルトの形状動作を変更するために使用できます(例えば、合字を抑制したり、合字の形成を要求したりするなど)。Unicode 17.0 には 172 個のフォーマット文字があります。
65個のコードポイント( U+0000~U+001FおよびU+007F~U+009Fの範囲)は制御コードとして予約されており、ISO/IEC 6429で定義されているC0およびC1制御コードに対応しています。U +0009 (タブ)、U+000A (ラインフィード)、U+000D (キャリッジリターン)は、Unicodeテキストで広く使用されています。文字化けと呼ばれる現象では、C1コードポイントは、以前は西ヨーロッパの文脈で広く使用されていたWindows-1252コードページに従って不適切にデコードされます。
図形文字、書式文字、制御コード文字、および私用文字は、総称して割り当て文字と呼ばれます。予約コードポイントは、有効で使用可能ですが、まだ割り当てられていないコードポイントです。Unicode 17.0時点では、814,664個の予約済みコード ポイント。
Unicodeで定義されている図形文字および書式文字の集合は、Unicodeで表現可能な抽象文字のレパートリーと直接対応していません。Unicodeは、抽象文字を特定のコードポイントに関連付けることで文字をエンコードします。 [ 67 ]しかし、すべての抽象文字が単一のUnicode文字としてエンコードされるわけではなく、一部の抽象文字はUnicodeでは2文字以上の文字のシーケンスで表現される場合があります。例えば、リトアニア語で必須である、オゴネク、上に点、および鋭アクセントを持つラテン小文字「i」は、文字シーケンスU+012F、U+0307、U+0301で表現されます。Unicodeは、Unicodeで直接エンコードされていない抽象文字に対して、一意の名前が付けられた文字シーケンスのリストを管理しています。[ 68 ]
割り当てられた文字はすべて、一意かつ不変の名前を持ち、それによって識別されます。この不変性は、Unicode 標準のバージョン 2.0 以降、名前の安定性ポリシーによって保証されています。[ 65 ]名前に重大な欠陥があり誤解を招く場合、または重大な誤植がある場合は、正式な別名を定義して、アプリケーションが公式の文字名の代わりに使用することを推奨する場合があります。たとえば、U+A015 ꀕ YI SYLLABLE WU の正式な別名はYI SYLLABLE ITERATION MARKであり、U+FE18 ︘ PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET ( sic ) の正式な別名はPRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRA CK ET です。[ 69 ]
Unicode には、サポートされるグリフのレパートリーを大幅に拡張する、文字を変更するためのメカニズムが含まれています。これは、ユーザーが基本文字の後に追加できる結合用発音区別符号の使用をカバーしています。複数の結合用発音区別符号を同じ文字に同時に適用できます。また、Unicode には、通常使用されるほとんどの文字/発音区別符号の組み合わせの合成済みバージョンも含まれています。これにより、従来のエンコーディングとの間の変換が簡単になり、アプリケーションは結合文字を実装することなく、Unicode を内部テキスト形式として使用できるようになります。たとえば、 は、éUnicode ではU+0065 e LATIN SMALL LETTER Eの後にU+0301 ◌́ COMBINING ACUTE ACCENT ) が続く形で表すことができ、これは合成済み文字U+00E9 é LATIN SMALL LETTER E WITH ACUTEとして同等です。そのため、ユーザーには同じ文字をエンコードする同等の方法が複数あることがよくあります。Unicode標準内の正規等価性のメカニズムは、これらの同等のエンコーディングの実用的な互換性を保証します。
一例として、韓国語のハングル文字が挙げられます。Unicodeは、ハングル文字の個々の構成要素からハングル音節を構成する仕組みを提供しています。しかし、Unicodeは、最も一般的な字母から作られた、あらかじめ構成された音節の 11,172の組み合わせ。
CJK 文字は現在、合成不可能な部首と合成済みの形に対するコードしか持たない。ほとんどの漢字は、部首と呼ばれるより単純な綴字要素から意図的に合成されるか、またはその合成として再構成されているため、原理的には Unicode はハングルの場合と同様に漢字の合成を可能にすることができたはずである。これにより必要なコード ポイントの数が大幅に削減され、任意の新しい文字を多数アルゴリズムで合成できるようになったかもしれないが、文字の語源の複雑さと部首システムの事後的な性質により、提案は非常に複雑になっている。実際、漢字がハングルほど単純または規則的に分解されないという現実から生じる困難に直面している。
CJK部首補足ブロックはU+2E80~U+2EFFの範囲に割り当てられ、康熙部首はU+2F00~U+2FDFの範囲に割り当てられています。表意文字記述シーケンスブロックはU+2FF0~U+2FFBの範囲をカバーしていますが、Unicode規格では、このブロックの文字を他の文字の代替表現として使用することに対して警告が出されています。
このプロセスは、表意文字の正式な符号化とは異なります。符号化されていない表意文字には標準的な記述がなく、記述された表意文字には意味が割り当てられておらず、記述された表意文字の同値性も定義されていません。概念的には、表意文字の記述は、文字シーケンス<U+0065, U+0301>というよりも、英語の「鋭アクセントの付いた 'e'」というフレーズに近いものです。
アラビア語やデーヴァナーガリー語を含む多くの文字には、特殊な綴り規則があり、特定の文字の組み合わせを特殊な合字形式に組み合わせる必要があります。合字の形成を規定する規則は非常に複雑になる場合があり、ACE(1980年代のDecoType社によるアラビア語カリグラフィックエンジン。Unicode標準の印刷版のすべてのアラビア語の例を生成するために使用されました)などの特殊な文字形成技術が必要になります。ACEは、 OpenType(AdobeおよびMicrosoft社)、Graphite(SIL International社)、またはAAT(Apple社) の概念実証となりました。
フォントには、異なる文字シーケンスを適切に出力する方法をオペレーティング システムに指示する命令も埋め込まれています。結合記号や分音記号の配置に対する簡単な解決策は、記号の幅を 0 に割り当て、グリフ自体を左サイドベアリングの左または右 (使用するスクリプトの方向によって異なります) に配置することです。この方法で処理された記号は、その前にある文字の上に表示されますが、基本グリフの幅や高さに対する位置は調整されません。そのため、見た目が不自然になり、一部のグリフと重なる場合があります。実際のスタッキングは不可能ですが、限られたケースで近似することは可能です (たとえば、タイ語の上部結合母音と声調記号は、最初から高さが異なる場合があります)。一般に、この方法は等幅フォントでのみ有効ですが、より複雑な方法が失敗した場合のフォールバック レンダリング方法として使用できます。
Unicodeにはいくつかのサブセットが標準化されている。Microsoft WindowsはWindows NT 4.0以降、657文字のWGL-4をサポートしており、これはラテン文字、ギリシャ文字、キリル文字を使用する現代のヨーロッパ言語のすべてをサポートしていると考えられている。Unicodeの他の標準化されたサブセットには、多言語ヨーロッパサブセット[ 71 ] MES-1(ラテン文字のみ、335文字)、MES-2(ラテン文字、ギリシャ文字、キリル文字、1062文字)[ 72 ]、MES-3AとMES-3B(2つのより大きなサブセット、ここには示されていない)がある。MES-2には、MES-1とWGL-4のすべての文字が含まれている。
DIN 91379規格[ 73 ]は、Unicode文字、特殊文字、文字シーケンス、および分音記号のサブセットを規定し、ヨーロッパにおける名前の正しい表現とデータ交換の簡素化を可能にしています。この規格は、すべての欧州連合加盟国の公用語に加え、ドイツ語系少数言語、アイスランド、リヒテンシュタイン、ノルウェー、スイスの公用語をサポートしています。他の表記体系の名称を関連するISO規格に従ってラテン文字に翻字できるように、基本文字と分音記号の必要な組み合わせがすべて提供されています。
| 行 | 細胞 | 範囲 |
|---|---|---|
| 00 | 20~7E | 基礎ラテン語(00~7F) |
| A0~FF | ラテン語1補足(80–FF) | |
| 01 | 00–13、14–15、16–2B、2C –2D、2E–4D、 4E–4F、50–7E、 7F | ラテン語拡張A(00~7F) |
| 8F、92、 B7、DE-EF、FA-FF | ラテン語拡張-B (80–FF ... ) | |
| 02 | 18–1B、1E–1F | ラテン語拡張B(... 00~4F) |
| 59、7C、92 | IPA拡張(50~AF) | |
| BB–BD、C6、C7、 C9、 D6、D8–DB、 DC、DD、 DF、EE | 間隔修飾文字(B0~FF) | |
| 03 | 74–75、7A、7E、84–8A、8C、8E–A1、A3–CE、 D7、DA–E1 | ギリシャ語(70~FF) |
| 04 | 00–5F、90–91、92 –C4、C7–C8、CB–CC、D0–EB、EE–F5、F8–F9 | キリル文字(00~FF) |
| 1E | 02–03、0A–0B、1E–1F、40–41、56–57、60–61、6A–6B、80–85、9B、 F2 –F3 | ラテン語拡張追加(00~FF) |
| 1階 | 00–15、18–1D、20–45、48–4D、50–57、59、5B、5D、5F–7D、80–B4、B6–C4、C6–D3、D6–DB、DD–EF、F2–F4、F6–FE | ギリシャ語拡張(00~FF) |
| 20 | 13–14, 15, 17, 18–19, 1A–1B, 1C–1D, 1E, 20–22, 26, 30, 32–33, 39–3A, 3C, 3E, 44, 4A | 一般的な句読点(00~6F) |
| 7階、82 | 上付き文字と下付き文字(70~9F) | |
| A3~A4、A7、AC、 AF | 通貨記号(A0~CF) | |
| 21 | 05、13、16、22、26、2E | 文字のような記号(00~4F) |
| 5B~5E | 数形(50~8F) | |
| 90~ 93、94~95、A8 | 矢(90~FF) | |
| 22 | 00、02、03、06、08 ~ 09、0F 、11~ 12、15、19 ~1A、1E~1F、27~ 28、29、2A、2B、 48、59、60~61、64~65、82~83、95、97 | 数学演算子(00~FF) |
| 23 | 02、0A、20~21、29~ 2A | その他技術(00~FF) |
| 25 | 00、02、0℃、10、14、18、1℃、24、2℃、34、3℃、50~6℃ | ボックスドローイング(00~7F) |
| 80、84、88、8C、90~93 | ブロックエレメント(80~9階) | |
| A0~A1、AA~AC、B2、BA、BC、C4、CA~CB、CF、D8~D9、E6 | 幾何学図形(A0~FF) | |
| 26 | 3A~3C、40、42、60、63、65~66、6A 、 6B | その他の記号(00~FF) |
| F0 | (01~02) | 私的利用エリア(00~FF…) |
| フェイスブック | 01~02 | アルファベット順プレゼンテーションフォーム(00~4F) |
| FF | FD | スペシャル |
Unicode文字を適切に処理できないレンダリングソフトウェアは、多くの場合、認識できない文字の位置を示すために、文字を開いた四角形として表示したり、 U+FFFDとして表示したりします。一部のシステムでは、このような文字についてより多くの情報を提供しようと試みています。AppleのLast Resortフォントは、文字のUnicode範囲を示す代替グリフを表示し、SIL InternationalのUnicodeフォールバックフォントは、文字の16進スカラー値を示すボックスを表示します。
一連のコード ポイントを一連のバイトとして保存するためのメカニズムがいくつか指定されています。
Unicode は、 Unicode Transformation Format (UTF) エンコーディングとUniversal Coded Character Set (UCS) エンコーディングの2 つのマッピング方式を定義しています。エンコーディングは、Unicodeコード ポイントの範囲 (場合によってはサブセット) を、コード ユニットと呼ばれる固定サイズの範囲にある値のシーケンスにマッピングします。すべての UTF エンコーディングは、コード ポイントを一意のバイト シーケンスにマッピングします。[ 74 ]エンコーディングの名前に含まれる数字は、コード ユニットあたりのビット数 (UTF エンコーディングの場合) またはコード ユニットあたりのバイト数 (UCS エンコーディングおよびUTF-1の場合) を示します。UTF-8 と UTF-16 は最も一般的に使用されているエンコーディングです。UCS -2は UTF-16 の廃止されたサブセットです。UCS-4 と UTF-32 は機能的に同等です。
UTF エンコーディングには次のものがあります:
UTF-8は、コードポイントごとに1~4個の8ビット単位(バイト)を使用します。ラテン文字に適しており、ASCII互換であるため、Unicodeテキストの交換における事実上の標準エンコーディングとなっています。FreeBSDや最近のLinuxディストリビューションでは、一般的なテキスト処理において、従来のエンコーディングを直接置き換えるものとして使用されています。
UCS-2およびUTF-16エンコーディングは、テキストファイルの先頭に使用するUnicodeバイトオーダーマーク(BOM)を規定しており、バイトオーダー検出(またはバイトエンディアン検出)に使用できます。U +FEFF ZERO WIDTH NO-BREAK SPACEとしてエンコードされたBOMは、使用されるUnicodeエンコーディングに関わらず、バイト順序の並べ替えにおいて明確な意味を持つという重要な特性を持っています。U +FFFE ( U+FEFFのバイトスワップの結果)は有効な文字とはみなされず、テキストの先頭以外の場所でU+FEFFが使用されると、ゼロ幅のノーブレークスペースとして扱われます。
同じ文字を UTF-8 に変換すると、バイト シーケンスになりますEF BB BF。Unicode標準では、BOM は「文字セットがマークされていない場合に、UTF-8 でエンコードされたテキストの署名として機能する」ことが認められています。[ 75 ]一部のソフトウェア開発者は、UTF-8 をローカルの 8 ビットコード ページと区別するために、UTF-8 を含む他のエンコードに BOM を採用しています。ただし、UTF-8 標準のRFC 3629では、UTF-8 を使用するプロトコルではバイト オーダー マークを禁止することを推奨していますが、これが不可能な場合についても説明しています。さらに、UTF-8 で可能なパターンに大きな制限があるため (たとえば、最上位ビットが設定された単独のバイトは存在できない)、BOM に依存せずに UTF-8 を他の文字エンコードと区別できるはずです。
UTF-32 と UCS-4 では、1 つの32 ビットコード単位が、任意の文字のコード ポイントをかなり直接的に表現します(ただし、プラットフォームによって異なるエンディアンによって、コード単位がバイト シーケンスとしてどのように表現されるかは異なります)。その他のエンコーディングでは、各コード ポイントは可変数のコード単位で表現される場合があります。UTF-32 は、プログラム内のテキストの内部表現(保存または転送されるテキストではなく)として広く使用されています。これは、GCCコンパイラを使用してソフトウェアを生成するすべての Unix オペレーティング システムが、 UTF - 32 を標準の「ワイド文字」エンコーディングとして使用しているためです。Pythonプログラミング言語の最近のバージョン(2.2 以降)では、Unicode 文字列の表現として UTF-32 を使用するように設定できるため、高レベルのコード化ソフトウェアで UTF-32 エンコーディングが効果的に普及しています。
Punycode は、別のエンコード方式であり、Unicode文字列をASCIIベースのドメインネームシステム(DNS)でサポートされている限定的な文字セットにエンコードすることを可能にします。このエンコード方式は、Unicodeでサポートされているすべての文字体系で国際化ドメイン名(IDN)を使用できるようにするシステムであるIDNAの一部として使用されています。以前の提案および現在では歴史的な提案として、 UTF-5とUTF-6があります。
GB18030は、中国標準化管理局が策定したUnicodeの別のエンコード方式です。中華人民共和国(PRC)の公式文字セットです。BOCU -1とSCSUはUnicodeの圧縮方式です。 2005年のエイプリルフールのRFCでは、 UTF-9とUTF-18という2つのパロディUTFエンコードが規定されました。
UTF-8形式の Unicode は、2008 年以来、ワールド ワイド ウェブで最も一般的なエンコーディングとなっています。 [ 76 ]これはほぼ普遍的に採用されており、非 UTF-8 コンテンツの多くはUTF-16などの他の Unicode エンコーディングで見つかります。2024 年の時点で、UTF-8 は平均してすべてのウェブページの 98.3% を占めています (上位 1,000 のウェブページのうち 983 ページも UTF-8 です)。[ 77 ]多くのページはコンテンツを表示するためにASCII文字のみを使用していますが、UTF-8 は 8 ビット ASCII をサブセットとして設計されており、現在では UTF-8 ではなく ASCII のみをエンコーディングとして宣言しているウェブサイトはほとんどありません。[ 78 ]追跡調査した言語の 3 分の 1 以上で、100% UTF-8 が使用されています。
インターネット技術タスクフォースによって管理されているすべてのインターネットプロトコル、例えばファイル転送プロトコル(FTP)[ 79 ]は、 1998年にRFC 2277が発行されて以来、UTF-8のサポートを必須としており、RFC 2277ではすべてのIETFプロトコルが「UTF-8文字セットを使用できなければならない」と規定されている[ 80 ] 。
Unicode は、テキストの内部処理と保存において主要な方式となっています。多くのテキストが依然としてレガシー エンコーディングで保存されていますが、Unicode は新しい情報処理システムの構築にほぼ独占的に使用されています。早期導入者はUCS-2 (UTF-16 の前身となる固定長 2 バイトの廃止された文字) を使用する傾向があり、後にUTF-16 (可変長の現在の標準) に移行しました。これは、これが非 BMP 文字のサポートを追加する最も混乱の少ない方法だったためです。最もよく知られているそのようなシステムはWindows NT (およびその後継である2000、XP、Vista、7、8、10、11 ) で、UTF-16 を唯一の内部文字エンコーディングとして使用しています。Javaおよび.NETバイトコード環境、macOS、KDEも内部表現にこれを使用しています。Windows 9xでは、 Microsoft Layer for Unicode を通じて 部分的な Unicode サポートをインストールできます。
UTF-8(元々はPlan 9用に開発された)[ 81 ]は、従来の拡張ASCII文字セットを比較的簡単に置き換えることができるため、ほとんどのUnix系オペレーティングシステム(一部のライブラリでは他の文字セットも使用されています)の主要なストレージエンコーディングとなっています。UTF-8は、ワールドワイドウェブ上のHTML文書で使用されている最も一般的なUnicodeエンコーディングでもあります。
Unicode を使用する多言語テキスト レンダリング エンジンには、Microsoft Windows 用のUniscribeとDirectWrite 、 macOS 用のATSUIとCore Text 、 GTK+およびGNOMEデスクトップ用のPango などがあります。
キーボード レイアウトではすべての文字に対して単純なキーの組み合わせを用意することはできないため、いくつかのオペレーティング システムでは、すべての文字にアクセスできる代替の入力方法を提供しています。
ISO/IEC 14755 [ 82 ]は、Unicode文字をコードポイントから入力する方法を標準化しており、いくつかの方法を規定しています。その一つが基本方式で、開始シーケンスの後にコードポイントの16進表現と終了シーケンスが続きます。また、画面選択入力方式も規定されており、文字マッププログラムのように、画面上の表に文字がリストされます。
既知の文字のコードポイントを見つけるためのオンラインツールとしては、Jonathan HedleyによるUnicode Lookup [ 83 ]やBenjamin MildeによるShapecatcher [ 84 ]などがあります。Unicode Lookupでは、検索キー(例えば「分数」)を入力すると、対応する文字とそのコードポイントのリストが返されます。Shapecatcherでは、Shapeコンテキストに基づいて、ボックス内に文字を描くと、その描画に近い文字とそのコードポイントのリストが返されます。
MIMEは、電子メール内の非ASCII文字をエンコードするための2つの異なるメカニズムを定義しています。これは、文字が電子メールヘッダー(「Subject:」など)にあるか、メッセージの本文にあるかによって異なります。どちらの場合も、元の文字セットと転送エンコーディングが識別されます。Unicodeで電子メールを送信する場合、メッセージの大部分がASCII文字で構成されているかどうかに応じて、 UTF-8文字セットとBase64またはQuoted-printable転送エンコーディングが推奨されます。2つの異なるメカニズムの詳細はMIME標準で規定されており、通常、電子メールソフトウェアのユーザーには公開されていません。
IETFはUTF-8を使用した国際化された電子メールのフレームワークを定義し[ 85 ] [ 86 ] 、そのフレームワークに従っていくつかのプロトコル を更新しました[ 87 ] [ 88 ] [ 89 ] [ 90 ] 。
電子メールにおけるUnicodeの導入は非常に遅れています。東アジアのテキストの一部は依然としてISO-2022などのエンコード方式でエンコードされており、携帯電話などの一部のデバイスではUnicodeデータを正しく処理できません。しかしながら、サポートは改善されつつあります。Yahoo !メール、Gmail、Outlook.comなど、多くの主要な無料メールプロバイダーがUnicodeをサポートしています 。
HTML 4.0以降、W3C勧告はすべてUnicodeを文書文字セットとして使用しています。ウェブブラウザは長年にわたりUnicode、特にUTF-8をサポートしています。以前は、主にフォント関連の問題に起因する表示上の問題がありました。例えば、Microsoft Internet Explorerのバージョン6以前では、明示的にそれらを含むフォントを使用するように指示しない限り、多くのコードポイントがレンダリングされませんでした。[ 91 ]
構文規則は文字の出現順序に影響を与える可能性があるが、XML(XHTMLを含む)文書は、定義上、[ 92 ]次の例外を除くほとんどのUnicodeコードポイントの文字で構成される。
HTML文字は、文書のエンコーディングがサポートしている場合はそのエンコーディングに従ってバイトとして直接表現されます。また、ユーザーは文字のUnicodeコードポイントに基づいて数値文字参照として記述することもできます。例えばΔ、、、、、、、、、、 (または同じ数値を16進数で表し、接頭辞としてЙ)קという参照は、すべてのブラウザでمΔ 、 ๗Й 、ק、م、๗、あ、叶、葉、말と表示されます。 あ叶葉말&#x
URI を、たとえばHTTPリクエスト内のURLとして指定する場合、非 ASCII 文字はパーセントエンコードする必要があります。
Unicodeは原則としてフォントそのものには関心がなく、実装上の選択肢と見なしています。[ 93 ]任意の文字には、より一般的な太字、斜体、基本字体から複雑な装飾スタイルまで、多くの異字体が存在する可能性があります。フォントが「Unicode準拠」であるのは、フォント内のグリフがUnicode標準で定義されたコードポイントを使用してアクセスできる場合です。[ 94 ]この標準では、フォントに含める必要がある文字の最小数は規定されておらず、一部のフォントでは文字レパートリーが非常に少ない場合があります。
TrueTypeとOpenTypeはUnicodeをサポートしており(Web Open Font Format(WOFFとWOFF2 )もこれらに基づいているため)、Unicodeベースの無料フォントや市販フォントは広く入手可能です。これらのフォント形式はUnicodeコードポイントをグリフにマッピングしますが、OpenTypeとTrueTypeフォントファイルは65,535グリフに制限されています。コレクションファイルは、単一のフォントファイルでこの制限を克服するための「ギャップモード」メカニズムを提供します。(ただし、コレクション内の各フォントには65,535グリフの制限が依然として適用されます。)TrueTypeコレクションファイルのファイル拡張子は通常「.ttc」です。
市場には数千種類のフォントが存在しますが、Unicodeの文字レパートリーの大部分をサポートしようとしているフォントは12種類にも満たず、これらは「汎Unicode」フォントと呼ばれることもあります。Unicodeベースのフォントは、通常、基本的なASCII文字と特定のスクリプト、文字セット、または記号セットのみのサポートに重点を置いています。このアプローチにはいくつかの理由があります。アプリケーションや文書が1つか2つ以上の書記体系の文字をレンダリングする必要はほとんどないこと、フォントはコンピューティング環境においてリソースを消費する傾向があること、そしてオペレーティングシステムやアプリケーションが必要に応じて別のフォントファイルからグリフ情報を取得する(つまりフォント置換)という点でますますインテリジェント化していることなどです。さらに、数万ものグリフに対して一貫したレンダリング指示を設計することは途方もない作業であり、ほとんどの書体ではそのような試みは収穫逓減点を超えてしまいます。
Unicodeは、異なるプラットフォーム上でテキストファイルを読み込もうとする際に発生する改行文字の問題を部分的に解決しています。Unicodeは、準拠したアプリケーションが行末文字として認識すべき 多数の文字を定義しています。
改行に関しては、Unicode はU+2028 LINE SEPARATORとU+2029 PARAGRAPH SEPARATORを導入しました。これは、段落と行を意味的にエンコードする Unicode ソリューションを提供し、さまざまなプラットフォーム ソリューションをすべて置き換える試みでした。その際に、Unicode は、従来のプラットフォーム依存のソリューションを回避する方法を提供しています。とはいえ、これらの Unicode の行区切り文字と段落区切り文字を唯一の標準的な行終了文字として採用している Unicode ソリューションはほとんどありません。ただし、この問題を解決するための一般的な方法は、改行の正規化です。これは、macOSのCocoa テキスト システムや、W3C の XML および HTML 推奨事項で実現されています。この方法では、考えられるすべての改行文字が内部的に共通の改行に変換されます (これはレンダリングのためだけの内部操作なので、どれが 1 つであるかは実際には問題ではありません)。言い換えると、テキスト システムは、入力の実際のエンコードに関係なく、文字を改行として正しく扱うことができます。
表意文字研究グループ(IRG)は、コンソーシアムとISOに対し、漢字統合(Unihan)、特にCJK統合漢字および互換漢字のレパートリーへの追加について助言する役割を担っています。IRGは、歴史的に漢字を使用してきた各地域の専門家で構成されています。しかし、委員会内での審議にもかかわらず、漢字統合は、プロジェクト発足以来、Unicode標準において常に最も議論の的となっている側面の一つです。 [ 95 ]
日本語JIS X 0208 ( Shift JISでエンコード)などの既存の文字セット規格では、統一基準が定義されています。これは、異体字の漢字を、筆跡やフォントの違いとして(したがって統一して)扱うべきか、それとも綴りの違いとして(別々にエンコードして)扱うべきかを判断するための規則です。UnicodeのCJK文字の文字モデルは、JIS X 0208で使用されている統一基準と、中国の共通中国語コード協会(Association for a Common Chinese Code)によって開発された基準に基づいています。[ 96 ]
ユニコードは、文体上の異体ではなく意味上の異体を符号化するという標準原則のため、一部の稀少で古風な漢字異体にコードポイントを割り当てていないとして批判を受けており、古代の珍しい日本語名の処理が複雑になる可能性がある。また、中国語、日本語、韓国語が多くの文字を共有していることを特に重視しているため、漢字統一は3言語を同じものとして扱っていると認識されることもある。[ 97 ]印刷慣習や手書きのカリキュラムの観点から、期待される文字形態の地域差は、必ずしも言語の境界に沿っているわけではない。香港と台湾はどちらも中国語を繁体字で表記しているが、推奨される文字形態が香港と台湾で異なる場合がある。[ 98 ]
あまり使用されていない代替エンコーディングも存在し、これらは多くの場合Unicodeより前から存在し、文字モデルはこのパラダイムとは異なり、地域や非標準の文字形式間の様々なスタイル上の違いを保持することを目的としている。一例はTRONコードで、一部のユーザーには歴史的な日本語テキストの処理に好まれているが、日本の一般大衆には広く採用されていない。もう1つは、香港、台湾、米国の図書館システムで採用されているCCCIIエンコーディングである。これらは一般的な使用においては独自の欠点があり、図書館システム以外では、CCCIIの4年後の1984年に導入されたBig5エンコーディングがCCCIIよりも一般的になった。[ 99 ] AppleでのResearch Libraries GroupのCJKシソーラスに基づく作業はCCCIIのEACCバリアントを維持するために使用され、UnicodeのUnihanセットの直接の前身の一つであったが、UnicodeはJISスタイルの統合モデルを採用した。[ 96 ]
Unicodeの初期バージョンでは、漢字の収録数は21,000字未満で、主に現代で比較的一般的に使用されている漢字に限られていました。バージョン17.0の時点で、この規格は101,000字以上の漢字をエンコードしており、さらに数千字を追加する作業が続けられています。これらの漢字は主に、漢語圏全体で使用されている歴史的および方言的な異体字です。
現代の書体は、統一された漢字を様々な地域特有のグラフィカル表現で表現する際の実際的な問題のいくつかに対処する手段を提供します。OpenTypeテーブル「locl」により、レンダラーはテキストロケールに基づいて各コードポイントに異なるグリフを選択できます。[ 100 ] Unicode異体字シーケンスは、テキスト内で希望するグリフを選択できるように注釈を提供することもできます。これには、特定の異体字をIdeographic Variation Databaseに登録する必要があります。

同じ文字体系の文字の適切なグリフがイタリック体のみ異なる場合、Unicodeは概ねそれらを統一しています。これは、右に示すロシア語、伝統的なブルガリア語、マケドニア語、セルビア語のテキストに典型的に現れる7つの文字のイタリック体グリフの比較からも明らかです。つまり、これらの違いはスマートフォント技術または手動でフォントを変更することで表現されます。OpenTypeの「locl」技術も同じものが使用されています。[ 101 ]
トルコ語アルファベットとアゼルバイジャン語アルファベットで使用するために、Unicodeにはドットなし小文字のI (ı)とドット付き大文字のI ( İ )が別々に含まれています。ただし、ドット付き小文字のiとドットなし大文字のIには、以前のISO 8859-9での扱いに合わせて、通常のASCII文字が使用されています。そのため、これらの言語の大文字と小文字を区別しない比較では、ラテン文字を使用する他の言語の大文字と小文字を区別しない比較とは異なるルールを使用する必要があります。[ 102 ] [ 103 ]これは、例えばサニタイズコードやアクセス制御が大文字と小文字を区別しない比較に依存している場合、セキュリティに影響を与える可能性があります。[ 103 ]
対照的に、アイスランド語のeth (ð)、横棒付きD (đ)、および反りD (ɖ)は、通常[注 4 ]大文字 (Đ) では同じに見えるが、逆の扱いを受け、大文字と小文字を別々に符号化される(大文字を統一する以前のISO 6937とは対照的である)。この方式では、テキストの言語を知らなくても大文字と小文字を区別せずに比較できるが、この方式にも問題があり、同形異義語攻撃に関するセキュリティ対策が必要となる。[ 104 ]

小文字のIが発音区別記号を適用したときにそのタイトルを保持するかどうかも、地域の慣習によって異なります。
Unicodeには多数のホモグリフがあり、その多くはASCII文字と非常に類似しているか同一です。これらの文字を置き換えると、一見正しい識別子やURLが作成されるものの、想定とは異なる場所に誘導される可能性があります。[ 105 ]さらに、ホモグリフは自然言語処理(NLP)システムの出力を操作するためにも使用されます。 [ 106 ]軽減策としては、これらの文字を禁止するか、異なる方法で表示するか、同じ識別子に解決するように要求する必要があります。[ 107 ]これらはすべて、文字セットが膨大で常に変化するため、複雑です。[ 108 ] [ 109 ]
2021年には、ケンブリッジ大学とエディンバラ大学の2人の研究者によってセキュリティアドバイザリが発表され、BiDiマークを使用することで、コードの大部分が見た目とは異なる動作をするように変更される可能性があると主張しました。この問題は「トロイの木馬ソース」と名付けられました。[ 110 ]これを受けて、コードエディターは強制的なテキスト方向の変更を示すマークを強調表示し始めました。[ 111 ]
UTF -8およびUTF-16エンコーディングは、コード単位のあらゆるシーケンスを受け入れるわけではありません。無効なシーケンスを読み込んだ場合の対応は実装によって異なり、セキュリティ上のバグにつながることがあります。[ 112 ] [ 113 ]
Unicode は、既存の文字エンコードとの間でコードポイントごとのラウンドトリップ形式変換ができるように設計されており、古い文字セットのテキストファイルを Unicode に変換し、その後 Unicode に戻して同じファイルを取得することができ、コンテキスト依存の解釈は必要ありません。つまり、 Unicode には、分音記号と合成文字の組み合わせなど、一貫性のないレガシーアーキテクチャが両方存在し、テキストを表す方法が複数存在することになります。これは、韓国語のハングルの 3 つの異なるエンコード形式で最も顕著です。バージョン 3.0 以降、異なるバージョンの Unicode を使用するソフトウェア間の相互運用性を保つため、既存の文字の組み合わせシーケンスで表すことができる合成文字は標準に追加できなくなりました。
既存のレガシー文字セットの文字とUnicodeの文字の間には、Unicodeへの変換を容易にし、レガシーソフトウェアとの相互運用性を確保するため、単射マッピングを提供する必要がある。Shift -JISやEUC-JPなどの従来の日本語エンコードとUnicode間の様々なマッピングに一貫性がなかったため、ラウンドトリップ形式の変換において不一致が発生していた。特に、レガシーデータベースデータで頻繁に使用されるJIS X 0208の「~」(1-33、WAVE DASH)文字を、U+FF5E~FULLWIDTH TILDE(Microsoft Windowsの場合)またはU+301C~WAVE DASH(他のベンダーの場合)にマッピングする際に不一致が発生していた。[ 114 ]
日本のコンピュータプログラマーの中には、UnicodeではU+005C \ REVERSE SOLIDUS(バックスラッシュ)とU+00A5 ¥ YEN SIGN (円記号)の使用を分離する必要があり、JIS X 0201で0x5Cにマッピングされており、この使用法を使用したレガシーコードが多数存在するため、Unicodeに反対する者もいた。[ 115 ](このエンコーディングでは、チルダ '~' 0x7Eもマクロン '¯'(現在は0xAF)に置き換えられている。)これらの文字の分離は、Unicodeよりずっと前からISO 8859-1に存在している。
タミル語やデーヴァナーガリー文字などのインド系文字には、 ISCII標準に合わせてそれぞれ128のコードポイントのみが割り当てられている。Unicodeインド系テキストを正しくレンダリングするには、格納されている論理順序の文字を視覚順序に変換し、構成要素から合字(接続詞としても知られる)を形成する必要がある。一部の地元の学者は、他の表記体系の慣例に反して、これらの合字にUnicodeコードポイントを割り当てることに賛成したが、Unicodeには下位互換性のためだけにアラビア語やその他の合字が含まれている。[ 116 ] [ 117 ] [ 118 ] Unicodeで新しい合字をエンコードすることは行われないだろう。その理由の1つは、合字のセットがフォントに依存し、Unicodeがフォントの違いに依存しないエンコードであるためである。2003年に中国標準化管理局が956の合成チベット語音節のエンコードを提案した際にも、同様の問題がチベット文字でも発生したが[ 119 ] 、これは関連するISO委員会( ISO/IEC JTC 1/SC 2 )によってエンコードが拒否された。[ 120 ]
タイ語アルファベットのサポートは、タイ語文字の順序について批判されてきた。先行する子音の左側に書かれる母音 เ、แ、โ、ใ、ไ は、他のインド系文字の Unicode 表現とは異なり、音声順ではなく表示順になっている。この複雑さは、Unicode が同じように機能し、タイ語が常にキーボードで書かれてきた方法であるタイ工業規格 620を継承しているためである。この順序の問題により、Unicode の照合プロセスが若干複雑になり、照合のためにタイ語の文字を並べ替えるためのテーブル参照が必要になる。 [ 97 ]たとえ Unicode が話し言葉の順序に従ってエンコードを採用したとしても、辞書の順序で単語を照合することは依然として問題である。例えば、 แสดง[sa dɛːŋ] 「実行する」という単語は、子音連結「สด」(子音「ส」に固有の母音を含む)で始まり、母音 แ- は話し言葉では ด の後に来ますが、辞書では、単語は書き言葉どおりに照合され、母音は ส の後に来ます。
発音区別符号付きの文字は、一般的に、単一の合成文字として、または基本文字と1つ以上の非分音記号の分解されたシーケンスとして表すことができます。例えば、ḗ(マクロンとアキュートが上に付いた合成済みのe)とḗ(eの後に結合マクロンと結合アキュートが上に続く)は、どちらもマクロン(◌̄)とアキュートアクセント(◌́)付きのeとして同じようにレンダリングされるはずですが、実際には、文字の表示に使用されているレンダリングエンジンとフォントによって、その外観は異なる場合があります。同様に、インド諸語のローマ字表記に必要な下点(アンダードット)も、多くの場合、正しく配置されません。多くの場合、あらかじめ合成されたグリフにマップされる Unicode 文字を使用すれば問題を回避できますが、あらかじめ合成された文字がエンコードされていない場合は、高度なレンダリング機能のためにGraphite、OpenType ('gsub')、またはAATテクノロジを使用するCharis SILなどの特殊な Unicode フォントを使用することで問題を解決できる場合が多くあります。
Unicode規格は、安定性を保証するための規則を定めています。[ 121 ]規則の厳しさに応じて、変更が禁止または許可されます。例えば、コードポイントに与えられた「名前」は変更できず、変更されることはありません。しかし、「スクリプト」プロパティは、Unicode独自の規則により、より柔軟です。Unicodeバージョン2.0では、バージョン1から多くのコードポイント「名前」が変更されました。同時に、Unicodeは、それ以降、コードポイントに割り当てられた名前は決して変更されないことを表明しました。これは、誤りが公開された場合、たとえ些細な誤りであっても(文字名でBRACKETをBRAKCETと綴った場合のように)、これらの誤りを修正できないことを意味します。 2006年に文字名の異常リストが初めて公開され、2021年6月時点で、問題が特定された文字は104個ありました。[ 122 ]例えば、以下の通りです。
Unicodeではスクリプト指定子(名前)を「Phags_Pa」と定義していますが、そのスクリプトの文字名にはハイフンが追加されます:U+A840 ꡀ PHAGS-PA LETTER KA。[ 125 ] [ 126 ]ただし、これは例外ではなく、スクリプト指定子ではハイフンはアンダースコアに置き換えられるという規則です。[ 125 ]
U+のASCII近似値として選択された。 [ 62 ]ゼロックス研究所
の
ボブ・ベルビル
が「ユニバーサルサイン」の最初の提案を行いました
。多くの人々が新しいエンコーディング設計の開発にアイデアを提供しました。1980年初頭、これらの取り組みは、著者によって
ゼロックス文字コード標準
(XCCS) へと発展しました。これは多言語エンコーディングであり、エド・スムラ、ロン・ペラー、その他多くの人々の努力により、1982年以来ゼロックス社内標準として維持されています。Unicode
は、8年間のXCCSの実践経験の結果として生まれました。 XCCSとの根本的な違いは、ピーター・フェンウィックとデイブ・オプスタッド(純粋な16ビットコード)と
リー・コリンズ
(表意文字の統合)によって提案されました。UnicodeはXCCSの多くの機能を保持しており、その有用性は長年にわたり国際的なコミュニケーション多言語システム製品において実証されてきました。
各エンコード形式は、UnicodeコードポイントU+0000..U+D7FFとU+E000..U+10FFFFをマッピングします。
システムが可変フォントをサポートしており、1つの言語のみを使用するものの、文字の完全なカバレッジ、または他の言語に適したグリフを使用するための言語タグテキスト機能も必要な場合は、この展開形式を選択してください(これには、言語タグとOpenTypeの「locl」GSUB機能をサポートするアプリが必要です)。