ASCII文字とUnicode文字が混在するバイナリデータを解析しています。ここに例があります:
A .. | B .... | C.。
ここで、2つのドットはUnicode文字の2バイトを表します。
私の質問は..フィールド区切り文字(|)(0x7c)を使用してこのデータを解析しても安全ですか。または、0x7cがUnicodeバイトの1つに現れる可能性がありますか?
お気に入り
A. || B .... | C.。
ここで、2番目と3番目のバイトは実際にはUnicode文字の一部です。|を使用して解析する場合 セパレータとして、間違った値を生成します。ありがとう
「Unicode文字」という表現は、「文字のUTF-16エンコーディング」を意味しているように見えます(コメントから判断して)。その場合、答えは、任意のAscii制御文字と任意のAscii文字がそこに表示される可能性があるということです(より正確には、UTF-16でエンコードされたデータのバイトの1つがAsciiコードの文字を表すバイトと一致する可能性があります)。自明なことに、ASCII文字のUTF-16エンコーディングは、0バイトとASCIIコード値を含むバイトで構成されます。また、たとえば、U + 7C7C CJK UNIFIED IDEOGRAPH-7C7C(xiān)のUTF-16エンコーディングは、2つの0x7Cバイトで構成されます。
VERTICAL LINE” |”に注意してください U + 007C(ASCIIでは0x7C)は、通常の用語では制御文字ではありません。ASCII制御文字は0x00から0x1Fおよび0x7Fです。(SPACE 0x20は、制御文字とグラフィック文字の両方であると説明されることがありますが、これは混乱を招き、最近では一般的に回避されています。)
解析の問題を解決するには、データの形式をより正確に指定する必要があります。アスキー文字の後にUTF-16エンコーディングで可変量のデータが続くという考えの場合、形式は明確に解析できないため、設計が不十分であるように思われます。たとえば、「A .. | B .... | C ..」では、ここで「| B」(バイト0x7C 0x42)として表示されているものが実際にはUTF-16ではないことを(追加のルールなしで)実際に知ることはできません。 U + 7C42またはU + 427Cを表すデータ(UTF-16のエンディアンに依存)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加