52

バイト オーダー マークを機能させるには、U+FFFE を非文字にする必要があります。

U+FFFF は、The Unicode Standardで「センチネルとしての内部目的に役立つ」と説明されています。理にかなっています。

しかし、私には理解できず、Unicode 標準では、非文字のセットに「Arabic Presentation Forms-A」内にランダムなブロックが含まれている理由が実際には説明されていません。これらは何のためですか?(バジリスクの目以外に?)

4

3 に答える 3

18

これらの非文字は、アプリケーションによる内部使用のためのものであり、置き換えてはなりません。

Unicode 規格で言われていることをもとに説明してみました。

Unicode には 66 個の非文字がありました。17 個のプレーンすべてについて、それぞれ 2 つあり、プレーンの最後の 2 つのコード ポイントは FFFE FFFF で終わります。他の 32 個の無文字は U+FDD0 から U+FDEF までの連続したブロックです。

だから合計数

 17*2 + 32 = 66

Unicode の第 16 章の次のテキストを読んでください。「歴史的な理由」のためにランダムな場所にあると書かれていますが、私は興味がありますが、あいまいさはないと思います。

歴史的な理由から、範囲 U+FDD0..U+FDEF はアラビア語表示形式-A ブロック内に含まれていますが、これらの非文字は「アラビア語の非文字」または「右から左への非文字」ではなく、どの言語でも区別されません。コードポイント値を除いて、他の非文字とは別の方法

U+FEFFBOM であり、そのU+FFFEバイトスワップ バージョンです。しかし、U+FFFEは文字ではないため、解釈プロセスが U+FFFE を最初の文字として検出すると、プロセスが不適切なバイト順のテキストに遭遇したか、ファイルが有効な Unicode テキストではないことを通知します。 、標準的な方法ではありません。1、逆バイト、または間違ったテキストのいずれかです。

Unicodeセクション 3.2C2では、

C2 プロセスは、非文字コード ポイントを抽象文字として解釈してはなりません。

  • 文字以外のコード ポイントは、センチネル値や区切り記号など、内部で使用できますが、公に交換することはできません。

したがって、アプリケーション開発者は、これらの文字を自由に使用できます。これらはセンチネルまたはデリミタとして使用されるか、baslik 文字である可能性がありますが、交換しないでください。

セクション16.7によると

実際、非文字は、アプリケーション内部の私用コード ポイントと考えることができます。セクション 16.5, 私用文字で説明されている私用文字とは異なり、割り当てられた文字であり、私的な合意による解釈の対象となるオープン インターチェンジでの使用が意図されているものとは異なり、非文字は永久に予約されており (割り当てられていない)、外部ではまったく解釈されません。アプリケーション内部の私的な使用の可能性

繰り返しになりますが、U+FFFF は Unicode 標準ではセンチネルとして予約されていませんが、典型的な使用例が与えられています。セクション 16.7を読む

U+FFFF と U+10FFFF。これらの 2 つの非文字コード ポイントには、特定の Unicode エンコード形式の最大コード単位値に関連付けられるという属性があります。UTF-16 では、U+FFFF は最大の 16 ビット コード単位値 FFFF 16 に関連付けられます U+10FFFF は最大の正当な UTF-32 32 ビット コード単位値 10FFFF 16に関連付けられ ます この属性は、これら 2 つの非文字コードをレンダリングしますセンチネルとしての内部目的に役立つポイント。たとえば、リストの終わりを示したり、有効な文字値よりも大きいことが保証されているインデックス内の値を表すために使用される場合があります。

于 2011-03-05T05:57:49.770 に答える
12

ここ xkcdで述べたように、U+FDD0実際にはバジリスクの目を表す Unicode 文字です。ただし、 (明らかな)個人の安全上の理由から、キャラクターは画面にレンダリングされません... :)

于 2012-12-05T18:24:30.413 に答える