- Unicode は各文字に一意のコード ポイントを割り当て、そのレパートリーを ISO/IEC 10646 と同期させます。
- UTF-8、UTF-16、UTF-32 は同じ文字をエンコードし、ロスレス変換を可能にします。
- 正規化、Bidi、UCD プロパティにより、一貫した比較、順序付け、レンダリングが保証されます。
- Unicode (Web では UTF-8 が望ましい) を採用すると、破損を防ぎ、国際化を促進します。
Unicode は、コンピューターがテキストを処理するときに使用する共通言語です。: ほぼすべての表記体系のすべての文字と記号に一意の番号を割り当て、プラットフォームや国をまたいでシームレスに保存、処理、共有できるようにします。
この標準は、古い文字セットの制限を克服するために生まれました。 (ASCIIセット以前は、短いか互いに互換性がなかった文字セット(例えば、コード ページ、EBCDIC など)がありましたが、現在では ISO/IEC 10646 と同期され、アルゴリズム(双方向など)が維持され、すべてが首尾一貫して動作するようにプロパティと正規化ルールが定義されています。
Unicode とは何ですか? なぜそれほど重要なのですか?
Unicode は普遍的かつ絶えず進化している文字エンコード標準です。 各文字を名前、コード ポイント、一連のプロパティ (スクリプト、カテゴリ、方向性、大文字/小文字など) で記述します。 Unicode コンソーシアム内の Unicode 技術委員会 (UTC) は、これを ISO/IEC 10646 標準と同期させています。.
その目標は普遍性、均一性、そして独自性である: 明確かつ再現可能なルールを使用して、多言語テキストの明確な交換を可能にする幅広いレパートリー。 これにより、最新のテクノロジー (オペレーティング システム、ブラウザー、XML、Java、データベース) では、ラテン文字、アラビア文字、CJK 表意文字、絵文字、技術記号や音楽記号を同じドキュメント内で混在させることができます。.
文字、グリフ、コードポイント
Unicode では、文字は抽象的な情報単位であり、コード ポイントはその数値識別子です。。 A グリフは、フォントによって異なる視覚的な形式(画面に表示されるもの)です。1 つの文字に複数のグリフがある場合があり、グリフが複数の文字を表す場合もあります。
コードポイントの通常の表記は 16進数のU+XXXX分析された資料の具体例:小文字の「l」は U+006C、合成小文字の「ü」は U+00FC、「é」は U+00E9、ギリシャ語のベータ:大文字は U+0392、小文字は U+03B2 です(一部のテキストでは「β」は U+0392 で引用されていますが、このコードは大文字の「Β」に対応します)。
Unicodeコード空間には1.114.112の位置(最大U+10FFFF)が存在する。すべての表記体系と記号を網羅し分類するように構成されており、各バージョンには数万の効果的で増え続ける課題が含まれています。
計画、エリア、ブロック
Unicode は、その空間を、それぞれ最大 17 個のコード ポイントを持つ 65.536 のプレーンに分割します。この構成により、関連するスクリプトとシンボルをグループ化して、探しているものをすばやく見つけることが容易になります。
最も関連性の高いプラン基本多言語計画 (BMP、計画 0) には、ほぼすべての現代文字と多くの記号が含まれています。補足多言語計画 (SMP、計画 1) には、歴史的文字と技術記号 (音楽記号や数学記号など) が含まれています。補足表意文字計画 (SIP、計画 2) は、CJK 表意文字を拡張します。計画 14 (SSP) には特別なラベルが含まれ、計画 15 と 16 は個人使用向けです。
ブロックとエリア: 計画は非公式にはエリアに、公式には連続したブロックに細分化されます。ブロックは文字を表にまとめたり記録したりするために使用されますが、必ずしも意味のある言語的グループ分けと一致するとは限りません。
CJK 表意文字と Unihan プロジェクト
東アジア(漢字)の表意文字は、地域によってスタイルが異なるものの、Unicodeで統一されている。ですが、同じ抽象的な性質を指しています。これは、中国、日本、韓国、ベトナム、香港、マカオ、シンガポール、米国などからのISO/IEC JTC1/SC2/WG2代表者で構成される表意文字報告者グループ(IRG)によって管理されています。
Unihanデータベース さまざまな言語や歴史的または企業標準でこれらの表意文字を管理するために不可欠な補助情報 (読み方、意味、等価性) を収集します。
主なCJKブロックと拡張:
- CJK統合漢字(BMP、U+4E00~U+9FFF): よく使われる文字 20.992 文字。
- 拡張子A(BMP、U+3400~U+4DBF): 6.592 個のあまり使用されない表意文字。
- B-H拡張: SMP/SIP/TIP では、これらは合計で数万個になります (B: U+20000–U+2A6DF、42.720; C: U+2A700–U+2B73F、4.154; D: U+2B740–U+2B81F、222; E: U+2B820–U+2CEAF、5.762; F: U+2CEB0–U+2EBEF、7.473; G: U+30000–U+3134F、4.939;
- その他の関連するCJKブロック: 康熙字の部首(U+2F00~U+2FDF)、CJKの記号と句読点(U+3000~U+303F)、互換性と互換形式、互換表意文字補足など。
ユニコードは、表意文字の導入には絶対的な終わりがないと予測している。 また、既存のコンポーネントに分解することで非コード化シンボルを表す表意文字記述シーケンスなどのメカニズムも検討します(ただし、標準的な分解や検索やソートなどの操作の保証はありません)。
エンコード形式: UTF-8、UTF-16、UTF-32
Unicode は、コード ポイントをストレージ ユニットに変換する変換形式 (UTF) を定義します。 ソフトウェアがコンテキストに応じてテキストを効率的に処理できるようにします。
UTF-8 可変長でバイト指向であり、U+0000~U+007Fの範囲のASCIIコードと1バイト単位で互換性があります。現在の標準では4文字あたり1~6バイトを使用します。古い文献では1~4バイトと記載されているものもありますが、現代のUnicodeではXNUMX~XNUMXバイトを使用しています。Webでは主流のフォーマットです。
UTF-16 16ビット単位を使用する
(1文字あたり1つまたは2つのコード単位)ほとんどの BMP 文字は 800 つのユニットに収まります。補助文字は U+DXNUMX ~ U+DFFF の範囲のサロゲート ペアを使用します。
UTF-32 固定長です。4 文字あたり XNUMX バイトでシンプルですが、スペースを消費します。直接文字インデックスが重要で、メモリが問題にならない場合に便利です。
UTF-8におけるビットの分配方法
UTF-8 形式では、コード ポイント ビットが 1 ~ 4 バイトのシーケンスに分散されます。 認識可能なヘッダーを使用すると、曖昧さが回避され、文字の境界を検出しやすくなります。
| Unicode範囲 | ビットパターン | バイト |
|---|---|---|
| U+0000..U+007F | 0xxxxxxx | 1 |
| U+0080..U+07FF | 110yyyyy 10xxxxxx | 2 |
| U+0800..U+FFFF | 1110zzzz 10yyyyyy 10xxxxxx | 3 |
| U+010000..U+10FFFF | 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx | 4 |
UTF-8の主な利点は、バイト順序の問題(エンディアン)を回避できることです。 ASCII との下位互換性があるだけでなく、テキスト ストリームを非常に効率的に処理できます。
エンコード方式、エンディアン、BOM
UTF 形式に加えて、Unicode ではシリアル化スキームも記述します。 異なるエンディアンを持つシステム間でバイトがどのように送信されるか、バイト順序などの側面がどのように通知されるかを解決します。
- UTF-8: エンディアンは適用されません。 バイトオーダーマーク (BOM) はヒントとして使用できますが、デフォルトでは必須でも推奨もされません。
- UTF-16: BE/LE (ビッグ エンディアン/リトルエンディアン) バリアントおよびオプションの BOM (欠落していてプロトコルで定義されていない場合は、ビッグ エンディアンであると想定されます)。
- UTF-32: 類似のルールを持つ BE/LE バリアント。BOM は注文マークとして許可されます。
特定の変種もある UTF-16BE/UTF-16LE や UTF-32BE/UTF-32LE (慣例により BOM なし) などのエンコード、および UTF-7 や UTF-EBCDIC などの歴史的に互換性のあるエンコード、さらに GB18030 (簡体字中国語と繁体字中国語の両方をサポートする UTF-8 に相当する中国語エンコード) もサポートされます。
正規化、合成、同値性
多くの文字は、プレコンポジットとして、またはベース+マークのシーケンスの組み合わせとして表すことができます。改訂版の典型的な例:合成前の「Ä」はU+00C4ですが、分解された形は「A」(U+0041)+分音記号(U+0308)です。ベトナム語の「ỗ」は「o」(U+006F)+サーカムフレックス(U+0302)+チルダ(U+0303)で表すことができます。
Unicodeは標準化された形式と2種類の同等性を定義している: 標準的 (本質的な内容が同じ) かつ互換性がある (見た目は同じでも意味が異なる形式)。 正規化により、信頼性の高い文字列比較が保証され、重複が削減されます。.
双方向アルゴリズムと特殊文字
アラビア語やヘブライ語などの右から左に書く文字の場合、Unicode には双方向アルゴリズムが組み込まれています。 (Bidi) は標準化され、進化しており (例: 6.3 の改訂)、ラテン語とアラビア語の混在テキストが正しい視覚的順序でレンダリングされます。
知っておくべきコードポイントクラス 受け取った素材に応じて、グラフィック文字(文字、記号、シンボル)、書式設定文字(非表示だが処理に影響:U+2028 改行、U+2029 段落区切り、U+00A0 ハードスペース)、互換性のために継承された制御コード(範囲 U+0000~U+001F、U+007F、U+0080~U+009F)、私的使用、予約位置、置換文字(UTF-800 の場合は U+D16~U+DFFF)、非文字(各プレーンの U+FFFE、U+FFFF)。
Unicode、ISO/IEC 10646、その他の標準(ASCII、ANSI、コードページ)
UnicodeはISO/IEC 10646(UCS)と同期しており、以前の標準とのマッピングが保持されます。 (ASCII、ISO 8859-1、ANSI Z39.64、JIS X 0208、KS X 1001、GB 2312、GB 18030、HKSCS、CNS 11643 など) に加えて、メーカー向けの専用スペースも確保しています。
ASCII と Unicode: ASCII は 7 文字の 128 ビット セットです。基本的な英語には十分ですが、 発音区別符号、表意文字、絵文字のある言語には不十分Unicode は、UTF 形式の 140.000/8/16 ビット エンコードで 32 文字以上をカバーします。
ANSIとコードページ: 「ANSI」は通常、限定的で相互に互換性のない8ビットWindowsコードページを指します。OEM-Latin IIを実行するコンピュータでIBM EBCDIC-Cyrillicでテキストを開くと、正しくない文字が表示されます。Unicodeは、独自のレパートリーと独自の形式間のロスレス変換によってこの問題を克服しています。
システム(Windows、Solaris)への実装と変換
Windowsは内部的に最新のAPIにUTF-16を使用している 次のような機能を提供します マルチバイトからワイド文字へ y ワイド文字からマルチバイトへ Unicode とコード ページ (SBCS/DBCS/MBCS) 間の変換を行います。 コードページへの変換を強制すると、データが失われる可能性がある。 すべての文字を表現できない場合は、
Windows上の新しいアプリケーションは内部的にUTF-16を使用する必要があります 変換をエッジ(I/O、プロトコル)に任せ、破損を最小限に抑えます。 それでも、Windows は、避けられない場合にはコード ページのサポートを維持します。.
改訂されたドキュメントによると、Oracle Solaris 11はUnicode 6.0とISO/IEC 10646:2011をサポートしている。 システム レベルでは、パラメータ セットのデフォルト形式として UTF-8 を使用することで、バイト順序の問題を回避し、ASCII を透過的に保持します。
Unicodeの実践:Web、ドキュメント、プログラミング
ウェブでは、UTF-8でコンテンツを提供したり保存したりするのが一般的です。HTMLでは、' ' は互換性を確保するために使用され、必要に応じて 8 進数値エンティティが使用されます (例: ユーロ '€')。
WordではUnicode記号を挿入することができます カーソルを置くか、「挿入」>「記号」を選択するか、コードを入力してAlt+Xを押すだけで簡単に変換できます。これにより、通常の推奨に従って値が文字に変換されます。 Altコードのリスト キーボードから記号を挿入します。
プログラミング言語でPython 3では文字列がUnicodeになりました。JavaとC#では「\uXXXX」エスケープが使用でき、HTMLでは「&#xXXXX;」が使用できます。重要なのは、編集、コンパイル、送信のいずれにおいても、エラーを回避するために同じエンコーディングを使用することです。
文字列全体が Unicode である場合、記号のコピーと貼り付けは機能します。一部で異なるエンコードが使用されている場合、疑問符、ボックス、または奇妙な記号が表示されることがあります。
文字データベース(UCD)、プロパティとカテゴリ
Unicode 文字データベース (UCD) は、各コード ポイントの名前、カテゴリ、スクリプト、大文字と小文字のプロパティ、方向性、その他の特性を公開します。この情報は、レンダリング エンジンとテキスト処理エンジンが適切に機能するために不可欠です。
これらの特性のおかげで異なるコンポーネントやアルゴリズム (並べ替え、単語の分割、大文字と小文字の変換など) が同じデータに対して一貫して動作することができます。
標準のバージョンと拡張:ハイライト
Unicodeはバージョンごとに成長しています新しい文字、記号、絵文字が組み込まれました。代表的なものとしては、1.0年のメジャーバージョン1991(7.161文字)と、その後の拡張版で数千もの新しい記号、表意文字、絵文字、文字が追加されたことが挙げられます。
例えば2022年にはバージョン15.0では、4.192個のCJK文字とその他の要素が追加され、約 149.186文字.
Unicodeテーブルを探索するためのツール
文字を検索・分析するための無料ユーティリティがあるUnibook Character Browser、SYMBL、Branah.com を使用すると、プロパティ、名前、文字ブロックを照会できるため、開発者やコンテンツ作成者は必要な情報を簡単に見つけることができます。
使用例: 住所フォーム、国際化、ビジネス
ユーザーが自分の言語と文字で住所を入力できるようにする エラーの削減とユーザーエクスペリエンスの向上に役立ちます。また、Unicodeの相互運用性により、異なるシステム間での変換時に発生する問題を防ぎ、デジタルチェーン全体でテキストの整合性を維持できます。
このため、Unicode は、デジタル インフラストラクチャ全体でテキストが最終的なものであることを保証する基本的な要素です。同じ文の中で「ñ」、アラビア語、中国語、絵文字のどれを使用しているかに関係なく、Web フォームからデータベース システム、印刷されたドキュメントまで、あらゆる言語で使用できます。
目次
- Unicode とは何ですか? なぜそれほど重要なのですか?
- 文字、グリフ、コードポイント
- 計画、エリア、ブロック
- CJK 表意文字と Unihan プロジェクト
- エンコード形式: UTF-8、UTF-16、UTF-32
- UTF-8におけるビットの分配方法
- エンコード方式、エンディアン、BOM
- 正規化、合成、同値性
- 双方向アルゴリズムと特殊文字
- Unicode、ISO/IEC 10646、その他の標準(ASCII、ANSI、コードページ)
- システム(Windows、Solaris)への実装と変換
- Unicodeの実践:Web、ドキュメント、プログラミング
- 文字データベース(UCD)、プロパティとカテゴリ
- 標準のバージョンと拡張:ハイライト
- Unicodeテーブルを探索するためのツール
- 使用例: 住所フォーム、国際化、ビジネス