私はファイル形式を設計しており、それを正しく行いたいと思っています。バイナリ形式であるため、ファイルの最初のバイト(またはバイト)が有効なテキスト文字を形成しないようにする必要があります(PNGファイルヘッダー1のように)。これにより、形式を認識しないツールでも、最初の数バイトを調べることでテキストファイルではないことがわかります。
上記のコードポイント0x7F
はすべて無効なUS-ASCIIなので、簡単です。しかし、Unicodeの場合はまったく別の話です。別に有効なUnicode文字からある民間利用の文字、noncharactersと歩哨は私がに見られるような、Unicodeのプライベート用途のキャラクター、Noncharacters&センチネルよくある質問。
無効なUS-ASCII、UTF-8、UTF-16LE、UTF-16BEになるファイルの先頭で使用できるバイトのセンチネルシーケンスは何でしょうか。
- 明らかに、最初のバイトは
0x80
有効なUS-ASCII(制御)文字になるため、以下の値を持つ0x00
ことはできません。したがって、使用することはできません。 - また、私用文字は有効なUnicode文字であるため、これらのコードポイントも使用できません。
- それはリトルエンディアンとビッグエンディアンの両方のUTF-16で動作しなければならないので、非文字などは、
0xFFFE
その逆としてもできません0xFEFF
有効なUnicode文字です。 - 上記の質問には、任意の使用していないことを示唆しているnoncharacters何かのようなので、まだ、有効なUnicodeシーケンスにつながることなどを
0xFFFF
行う画像のもあります。
私が使用するために残されている将来の保証のセンチネル値は何でしょうか?
1)PNG形式には、最初のバイトとして非ASCII 0x89
値があり、その後に文字列が続きますPNG
。PNGの最初の数バイトを読んだツールは、それが解釈できないのでそれがバイナリファイルであると決定するかもしれません0x89
。一方、GIFファイルは、有効で読み取り可能なASCII文字列で始まり、GIF
その後にさらに3つの有効なASCII文字が続きます。GIFの場合、ツールは読み取り可能なテキストファイルであると判断する場合があります。これは間違っており、非テクスチャバイトシーケンスでファイルを開始するというアイデアは、Andy McFaddenによるDesigning File Formatsから生まれました。
GIF8
ます。SGI moviファイルはで始まりますMOVI
。1つのスタイルのzipアーカイブファイルはZZ
、より一般的なpkzip形式で始まりPK
ます。最初のバイトが無効なテキスト文字であるという制約は、野生で見つかったものと一致しないようです。これがなぜ必要なのか興味があります。
Since it is a binary format, the first bytes of the file should not form valid textual characters
-このアプリケーションがファイルタイプを識別する方法を示すマジックファイル(多くのUNIXシステムでは/ usr / share / magic、または/ etc / magic)を確認する必要があります。PNGファイルは\x89PNG\x0d\0a\x1a\x0a
、「PNG」に注意してください。これは生の文字列です。シーケンス\x89
などは、印刷できないバイトです。