なくなりました利用Unicodeの署名バイト順マーク(BOM)?
-
20-08-2019 - |
質問
これらは陳腐化?そのような最悪の考え--組み込みながら、何らかの内容のファイルが見えないからだに影響を及ぼすのは、ファイル可能です。かわからないのはなぜ使いたいと思っています。
解決
彼らは、はい、いくつかのケースで必要です。
未知のUTF-16ファイルを読み込むときに、どのように使用されている2のどちら伝えることができますか? 唯一の解決策は関係なく、使用エンディアンの、何か他のものと間違われることはありませんファイルに簡単に識別マーカーのいくつかの種類を配置することです。
これは、BOMが何をするかです。
そして、あなたは1が必要なのでしょうか?あなたは1だ場合のみ)エンディアンが(それはUTF-16のために重要な、しかし、UTF8は関係なく、常にエンディアンの同じに見える)の問題である、とのファイルが共有されようとしているUTFエンコーディングを使用して外部アプリケーションでます。
独自のアプリがファイルを読み書きするために起こっている唯一のものである場合は、、あなたはBOMを省略し、単に一度、あなたが使用するつもりエンディアンているすべてのために決定することができます。しかし、別のアプリケーションがファイルを読むために持っているならば、それは事前にエンディアンを知って、そうではないだろうBOMを追加することは良い考えかもしれません。
他のヒント
一部の指導力を発揮する必要があると結 UTF BOM FAQ からのUnicodeコンソーシアムが有効なことがあります。
Q:うBOM?
A: バイト順マーク(BOM)の文字コードU+FEFF のデータストリーム, できとして使用する署名を定義するバイト順、エンコーディングの形式は主に無印の平文ファイルです。下高レベルのプロトコルの利用BOMが必須(又は禁止)のUnicodeデータストリームで定義されるプロトコルです。 (重視す。)
ないものバイト順マークが 組み込み のデータです。うものではない 接頭辞 のデータです。その文字だけのバイト順マーク時の最初のデータストリームです。どこか他の、あなたのもの 幅ゼロの非破壊スペース.Unicode識プログラムなので、バイト順マークな本当に害され、その存在はとにかくからの文字が見えない、ワード-ジョイナーのブロックのテキストで接合次の文字を全く光らないようにして、そしても、何の効果もありません。
Q:がBOMを導入するのが良いのか。
A: BOMは初となるファイル入力したテキストがされるべきであると考えている。も大少しエンディアン形式でもあるヒントにすることを示すファイルでUnicodeに対して、従来のエンコードされて署名に特定のエンコード形式を使います。
いったいBOMプログラムでは対応できる複数のエンコーディングでのUnicodeで扱います。どうかごプログラムを知る使用するエンコーディング時の通訳を入力?
Q:がBOMを使用するのでは16ビットUnicodeテキストを使うことができます。
A: いいえ、BOMとして使用できる署名をどのようにUnicode textに変え:UTF-16、UTF-8UTF-7。の正確なバイトを構成するBOMがどのようなUnicode文字U+FEFFに変換し、その変換形式です。その形は、BOMムを示すものではUnicodeファイルの形式です。
ことになるだろう次の場合には、BOMは使用頻度の高います。この区別をUTF-8で符号化されたテキストからその他のエンコーディング;でマーキングの順番のバイトからUTF-8はひとつだけです。
ばねの設計独自のプロトコルまたはデータフォーマット、ないを使用する場合BOM.別の質問をFAQに触れる:
Q:どんなタグデータのない解釈U+FEFFとしてBOM?
A: 使用タグにはUTF-16BEを示すビッグエンディアンUTF-16文字、UTF-16LEを示すのにちょっとエンディアンUTF-16です。う場合に使用BOMには、タグのテキストだけでなく、UTF-16です。
いつの概念 タグ付け データの形式です。これを指定する書式 out-of-band からのデータそのものです。その場合このような施設が利用可能でないことが多いが、古いシステム改修のためにUnicodeで扱います。
BOMは、ファイルが入っているのUnicodeのどのエンコーディングを意味します。この区別がないと、ユニコードリーダーがファイルの読み方を知ることはできません。
ただし、UTF-8はBOMを必要としません。
Wikipediaの記事をチェックします。
私はあなたがBOMを必要としないと言うつもりです。順序マークBytoそれはファイルがであるかどうかをコンピュータに知らせるようUTF-16とUTF-32のためにのみ有用ですビッグエンディアンかリトルエンディアンする。いくつかのテキストエディタは、ドキュメントをコードする使用していますが、これはUnicode標準の一部ではないかを決定するためにバイトオーダーマークを使用することができます。
「BOM」は、それがUnicodeを使用すると、16ビット文字を使用することを意味すると仮定されたUnicode文字の初期の頃から、ホールドオーバーです。それだけで1つのバイトの順序を有しているUTF-8のような符号化で完全に無意味です。 (4 の異なるのバイトでエンコードされたBOMが必要になりそうする)ことが可能なすべてのミドルエンディアンバイトオーダーを区別できないので、U + FEFFの選択は、また、UTF-32のための次善のです。
異なるバイト順序のプラットフォーム間でUTF-16またはUTF-32のデータを送信するときにあなたがいずれかを使用したいだけの理由があるが、(1)ほとんどの人はとにかくUTF-8を使用し、(2)MIME charset
パラメータは、より優れたメカニズムを提供します。
UTF16およびUTF32は、両方のビッグエンディアンとリトルエンディアン形式で書き込むことができます。あなたは、ヒューリスティックエンディアンのいずれかでファイルを処理した結果を分析することによって、エンディアンを決定しようとすることができますが、あなたの気にそのすべてを保存するために、BOMはすぐにあなたを伝えることができます。
あなたはそれがバイト単位でデコードしてUTF-8は本当に、しかしBOMを必要としません。
にかかわらず、あなたは、テキストファイルを読むときに注意するのはおそらく価値のあるテキストファイルを作成するときに、これらを自分で使うかどうか。すなわち、ファイルの先頭に検出し、スキップ(理想的にはそれに応じてハンドル)BOM。私はそれを持っていたと私は何が起こっていたかを考え出しまで、最初は私のいくつかの問題を引き起こしているいくつかのに遭遇しました。
UTF16およびUTF32のBOMは、コンテンツは、ビッグエンディアンかリトルエンディアンであり、またその内容は、Unicodeが、UTF-8 BOMがUTF-8でエンコードされたとしてファイルを分類しているかどうかを教えてくれたよう。 UTF-8 BOMがなければ、どのようにそれは、ANSIファイルまたはUTF-8でエンコードされたファイルであるかどうかを知ることができますか? UTF-8は、常にバイトストリームであるため、UTF-8 BOMは、当然のエンディアンを教えてくれませんが、内容はUTF-8でエンコードされたUnicodeまたはANSIである場合には伝えます。もちろん、有効なUTF-8シーケンスをスキャンすることができますが、私の意見では、ファイルの最初の3つのバイトを確認することが容易です。