Unicode Character Encoding Modelで定義されているように、コード化された文字セットは、文字を非負の整数にマップします (たとえば、 LATIN SMALL LETTER Aから 97 まで、従来の ASCII と UCS の両方によって)。
注:文字と抽象文字には違いがあります。後者の用語は、文字の概念をより厳密に指しますが、最初の用語は、コード化された文字セットのコンテキストにおける概念です。一部の抽象文字は、複数の文字で表されます。ウィキペディアの Unicode の記事では、例を挙げています。
たとえば、リトアニア語で必要とされる、オゴネク、上にドット、鋭いアクセント [抽象的な文字] を含むラテン語の小文字 "i" は、文字シーケンス U+012F、U+0307、U+ で表されます。 0301。
UCS (Universal Coded Character Set) は、国際標準 ISO/IEC 10646 で定義されたコード化文字セットであり、参照用に、この公式リンクからダウンロードできます。
当面のタスクは、指定された非負の整数がUCS (Universal Coded Character Set)によって文字にマップされているかどうかを判断することです。
実際には UCS によって予約されているにもかかわらず、文字が割り当てられていない非負の整数を最初に考えてみましょう。UCS (§ 6.3.1、分類、表 1、リンクされたドキュメントの 19 ページ) には、対応する基本タイプに基づいて 3 つの可能性がリストされています。
- サロゲート(範囲 D800–DFFF)
非文字 (範囲FDD0 –FDEF と、値 FFFE または FFFF で終わる任意のコード ポイント)
Unicode 標準では、非文字を次のように定義しています。
非文字は、永久に予約されているコード ポイントであり、文字が割り当てられることはありません。
このページでは、非文字をより正確にリストしています。
- 予約済み(このカテゴリに属する非負の整数を見つけられませんでした)
一方、基本型が次のいずれかであるコード ポイント:
- グラフィック
- フォーマット
- コントロール
- 私的使用
キャラクターに割り当てられます。ただし、これは議論の余地があります。たとえば、私用のコード ポイントには実際に文字が割り当てられていると見なすべきでしょうか。まさしく UCS (§ 6.3.5, Private use characters ; リンクされたドキュメントの 20 ページ) では、次のように定義されています。
私用文字は、この国際規格によっていかなる形でも制限されません。私用文字は、ユーザー定義文字を提供するために使用できます。
さらに、UCS がマップまたは予約する非負の整数の範囲を知りたいです。最大値は?一部のページで、UCS がマップする非負の整数の範囲全体が、おそらく 0 ~ 0x10FFFF であることを発見しました。これは本当ですか?
理想的には、この情報は、アルゴリズムを構築できる機械可読形式で公開されます。たまたまですか?
明確にするために: 必要なのは、非負の整数を引数として受け取り、UCS によって文字にマップされているかどうかを返す関数です。さらに、公式の機械可読情報に基づいていることを希望します。この質問に答えるには、関数を自分で構築できるようなリソースを 1 つ指摘するだけで十分です。