一部のテストでは、無効なUnicode文字を含む文字列が必要です。 Zshでこれらの文字列を作成するには?
答え1
UTF-8でエンコードされたUnicode文字に言及しているとします。
それはあなたが何を意味するかによって異なります。無効。
invalid_byte_sequence=$'\x80\x81'
これはUTF-8エンコーディングでは無効なバイトシーケンスです(UTF-8エンコーディング文字の最初のバイトには常に2つの最も高いビットセットがあります)。ただし、シーケンスは文字の中央に表示されるため、他の無効なシーケンス(たとえば)にリンクすると、最終的に有効なシーケンスを形成する可能性があります$'\xe1'
。$'\xe1'
あるいは、$'\xe1\x80'
それ自体が無効であり、切り捨てられた文字として扱われる可能性があります。
other_invalid_byte_sequence=$'\xc2\xc2'
0xc2バイトは2バイト文字を開始し、0xc2はUTF-8文字の中央にはありません。したがって、有効なUTF-8テキストではシーケンスが見つかりません。 UTF-8エンコーディングにまったく表示されないバイトと$'\xc0'
同じです。$'\xc1'
\uXXXX
およびシーケンスの場合、\UXXXXXXXX
現在のロケールのエンコーディングがUTF-8であると仮定します。
non_character=$'\ufffe'
これは現在指定されている66のうちの1つです。非文字。
not_valid_anymore=$'\U110000'
Unicodeは、最大0x10FFFFのコードポイントに制限されます。 UTF-8エンコーディングはもともと0x7FFFFFFFF(perl
最大0xFFFFFFFFFFFFFFFFまでのバリアントもサポートされています)を含むように設計されていましたが、現在は通常そのエンコーディングに制限されています。
utf16_surrogate=$'\ud800'
コードポイント0xD800〜0xDFFFは、UTF16エンコーディング用に予約されたコードポイントです。したがって、これらのコードポイントのUTF-8エンコーディングは無効です。
現在のバージョンのUnicodeでは、残りのコードポイントのほとんどはまだ割り当てられていません。
unassigned=$'\u378'
最新バージョンのUnicodeには、指定された新しい文字が含まれています。たとえば、Unicode 8.0(2015年6月リリース)