web-dev-qa-db-ja.com

Unicode U + 001Aキャラクターとは何ですか?別名0x1A

U + 001A文字は、文字エンコードに関連するエラーメッセージに頻繁に表示されます。 U + 001Aキャラクターとは何ですか?

25
KevSheedy

U + 001AはSUBSTITUTEという名前の制御文字としてUnicode標準で定義されており、標準の 16章 で次のように特徴付けられるグループに属します。 ISO/IEC 2022フレームワークで定義されているC0およびC1制御コードとの互換性のためのUnicode標準[...]制御コードのセマンティクスは、通常、それらが使用されるアプリケーションによって決定されます。ただし、特定のアプリケーションの使用がない場合、ISO/IEC 6429:1992で指定されている制御機能のセマンティクスに従って解釈される場合があります。

ISO 6429は実質的に ECMA 48 と同等です。これは、このコードに短い名前SUBがあることを言及し、次のように定義しています。無効またはエラーです。これは Asciiでのこの制御コードの定義 を反映しています。

したがって、一般に、U + 001Aを使用して、想定される文字データ内のバイトの存在など、適用されている文字エンコーディングの解釈がない文字レベルのデータエラーを示すことができます。大雑把に言えば、それは「悪い文字データ」を意味しますが、より適切には「データを文字として解釈しようとするときの不正なデータ」を意味します。ただし、Unicodeでは、U + FFFD REPLACEMENT CHARACTERがより適切であり、特定のUnicodeセマンティクスがあります。

質問には「xml」というタグが付けられているため、XML 1.0では、U + 001Aは 2.2文字 句で禁止されていることに注意する必要があります。 「サロゲートブロック、FFFE、およびFFFFを除くすべてのUnicode文字」というコメントは誤解を招きやすいことに注意してください(ただし、コメントは規範的ではありません)。 U + 001AはUnicode文字ですが、グラフィック文字ではなく、その効果はUnicode標準では定義されていません。

21

これがCtrl + Z制御コードです。 CPは、Windowsで特別なものであり、CP/Mから継承したDOSから継承しました。 UNIXでのCtrl + Dの使用方法と同様に、そのレガシー使用はテキストの終わりマーカーとしてでした。

ただし、エラーメッセージでそれを確認したり、失敗したエンコード変換のフォールバック文字として使用したりすることは非常に珍しいことです。コードを再確認し、U + 003FまたはU + FFFDではなく、より一般的なエンコードフォールバック文字であることを確認します。または、あなたが扱っている特定のコードの単なる癖です。

14
Hans Passant

私が知る限り、 + 001A はUnicodeのレガシー文字です。存在する唯一の理由は、 [〜#〜] ascii [〜#〜]代替文字 ( "...無効またはエラーであると認識された文字、または特定のデバイスで表現できない文字の。」)。また、文字ストリームを終了するために時々使用されました(これはおそらく問題の一般的な原因です)

Unicodeでは、その機能は + FFFD REPLACEMENT CHARACTER に引き継がれます。

7
Joachim Sauer