C++でUTF-8であるかどうかを調べるためにByte Order Markファイルを調べる方法を知りましたか?C++ UTF-8であるかどうかを調べるためにファイルByte Order Markを検査する方法?
答えて
0xEFという、0xBB、0xbfの
順序は、エンディアンに依存しません。
C++でファイルを読む方法はあなた次第です。個人的に私はまだCスタイルのFile
メソッドを使用しています。なぜなら、それらは私がコーディングしているライブラリによって提供されており、バイナリモードを指定して、意図しない翻訳を避けることができるからです。デフォルトで
#include <fstream>
...
char buffer[100];
ifstream myFile ("data.bin", ios::in | ios::binary);
myFile.read (buffer, 3);
if (!myFile) {
// An error occurred!
// myFile.gcount() returns the number of bytes read.
// calling myFile.clear() will reset the stream state
// so it is usable again.
}
...
if (!myFile.read (buffer, 100)) {
// Same effect as above
}
if (buffer[0] == 0XEF && buffer[1] == 0XBB && buffer[2] == 0XBF) {
//Congrats, UTF-8
}
から適合
あるいは、多くの形式使用UTF-8は他のBOM(UTF-16、またはUTF-32例えば)が指定されていない場合。一般的に
'#include
@AndréCaronはあまりにも古くて、たくさんのコードを実行するためにバグが多いので、他の人たちを時折修正しようとします。 – John
、あなたがすることはできません。
バイトオーダーマークが存在することは、読んでいるファイルがユニコードであることを強く示しています。テキストファイルが必要な場合は、最初の4バイトは次のようになります。
0x00, 0x00, 0xfe, 0xff -- The file is almost certainly UTF-32BE
0xff, 0xfe, 0x00, 0x00 -- The file is almost certainly UTF-32LE
0xfe, 0xff, XX, XX -- The file is almost certainly UTF-16BE
0xff, 0xfe, XX, XX (but not 00, 00) -- The file is almost certainly UTF-16LE
0xef, 0xbb, 0xbf, XX -- The file is almost certainly UTF-8 With a BOM
他に何がありますか?あなたが得るバイトがこれらの5つのパターン以外のものであれば、あなたのファイルがUTF-8であるかどうかを特定することはできません。
実際、0x00〜0x7fのASCII文字のみを含むテキスト文書は、有効なUTF-8文書であり、平易なASCII文書です。
文書がISO-8859-1、UTF-8、またはCP1252などでエンコードされているかどうかに基づいて、見られる特定の文字に基づいて推論することができるヒューリスティックがありますが、最初の2バイト、3バイト、または4バイトのファイルでは、あなたが見ているものが間違いなくUTF-8であるかどうかは分かりません。
"(ただし00:00ではない)"は、UTF-16BEとUTF-16LEの両方に適用されるのでしょうか? –
fe ff 00 00はUTF16-BEであり、UTF32ではありません。 UTF-32では、U + FFFEを表します。これは非文字であり、Unicodeドキュメントには存在しないはずです。 UTF-16BEでは、BOMの後ろにヌル文字が続きます –
if (buffer[0] == '\xEF' && buffer[1] == '\xBB' && buffer[2] == '\xBF') {
// UTF-8
}
ifstream.read(..)(not get())とBOMバイトが一致するためのcharリテラルの組み合わせを使用する必要がありました。乾杯! –
- 1. C++ Xerces-c - nodeがプレースホルダーであるかどうかを調べる方法
- 2. ファイルがシンボリックリンクかどうかを調べるためのfstat()のPOSIXの方法はありますか?
- 3. 指定された文字列が.xmlファイルであるかどうかを調べる方法
- 4. matlabで行列が空であるかどうかを調べる方法は?
- 5. SWT:シェルに子シェルがあるかどうかを調べるための簡単な方法
- 6. C#/ .NETにファイルが存在するかどうかを調べるには?
- 7. 型パラメーターが型のサブタイプであるかどうかを調べる方法は?
- 8. MethodInfoが基本メソッドのオーバーライドであるかどうかを調べる方法
- 9. ITypeが抽象クラスであるかどうかを調べる方法
- 10. TrueTypeフォントがイタリック体であるかどうかを調べる方法は?
- 11. solrサーバーが実行中であるかどうかを調べる方法
- 12. 部屋番号がデータベースにあるかどうかを調べる方法
- 13. 色が範囲にあるかどうかを調べる方法
- 14. cytoscape.js - 親ノードに子ノードがあるかどうかを調べる方法
- 15. TSQL - 列にスペースがあるかどうかを調べる方法char(32)?
- 16. 注釈がMKPolygonView(iOS)内にあるかどうかを調べる方法
- 17. カーソルに結果があるかどうかを調べる
- 18. ユーザがFacebookに接続しているかどうかを調べるために使用する方法
- 19. charが改行であるかどうかを調べる
- 20. C#SortedListにキーが存在するかどうかを調べる最良の方法はどれですか?
- 21. androidでスピーカーフォンがオンかどうかを調べる方法
- 22. 型の型がHashSetであるかどうかを調べる方法とそれをキャストする方法?
- 23. divにスクロールバーがあるかどうかを調べるには
- 24. Oracle:保留中のトランザクションがあるかどうかを調べる方法
- 25. ファイルが存在するかどうかを調べる簡単な方法はありますか?
- 26. Extjs:要素にツールチップがあるかどうかを調べる
- 27. C# - 文字列がDataRowにあるかどうかを調べる
- 28. STLベクトルの中にC++ STLベクトルがあるかどうかを調べる
- 29. mvc 4 IEnumerableがnullであるかどうかを調べる
- 30. 無向グラフが木であるかどうかを調べる
問題は何ですかを参照してください、署名/ unsigned char型の問題を回避するために、
buffer[0] == '\xEF'
代わりのbuffer[0] == 0xEF
を使用することをお勧めしますか? 0xEF、0xBB、0xBFと比較するだけです。私はあなたの問題の詳細を述べる必要があると思います。 –これは多少の関連性があります:http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8 – NPE
どの言語でも同じことが言えます。あなたは最初の3バイトを取得します。 Unicode Byte Order MarkのUTF-8バイトのように見える場合は、UTF-8です。もしそうでなければ、そうではありません。あなたのためにソースコードを書く人を頼んでいますか? –