2009-06-18 33 views
1

ここでは、Unicodeファイルの読み方についていくつかの回答を読んでいます。ほとんどの人がUTF8-CPPまたはiconvを指しています。C++ファイル読み込みライブラリ - ANSIとUnicode

私が見つけたライブラリはANSIとUnicodeの両方のファイルで動作しません。理想的には、ファイル名を渡す関数が1つ必要です。そのファイルの内容が返され、それともできないのですか?

私はそれについてどのような提案をすればいいですか?

+0

の聖杯をtahtために、あなたは私のブログの記事を参照することができますファイルのエンコードを自動検出することは100%保証されていません。推測するアルゴリズムはありますが、100%信頼できるものではありません。 –

答えて

2

これはバイナリの読み込みではありませんか?他のすべての形式は解釈の問題であり、その後正確なエンコードなどが重要になります。

BOMにより、ユニコードは自動検出されることがありますが、必ずしもそうであるとは限りません。検出メカニズムが失敗すると、プログラムが破損します。私はそれがほとんどの人がそれを控える理由だと考えています。

+0

多分彼はユニコードのファイル名を指しています。 –

0

あなたがwidestringを使用している場合、UTF8-CPPはUTF8(utf8 :: is_validおよびutf8 :: find_invalid)を検出し、変換を行います(utf8 :: utf16to8)。それはうまくいく、何が問題なの?

0

あなたは技術を組み合わせて使用​​することができます。一般的には

、ほとんどのUnicodeのファイルがBOMで始まります。つまり、ファイルが0xfffeまたは0xfeffで始まる場合は、となる可能性があります。は、それがUnicodeであると仮定します。 UTF-32 AFAIKを使用する人はほとんどいませんが、BOMメソッドを使用して推測することはできます(Wikiページを参照)。

UTF-8ファイルの場合、UTF-8を使用してUTF-16(wstring)に変換できます。それがUTF-16ファイルの場合は、標準ライブラリを使用して読むのが難しい場合があります。誰もがそれを使用している場合、私は知らないので、私は経験がない - UTF-32の場合

http://cfc.kizzx2.com/index.php/reading-a-unicode-utf16-file-in-windows-c/

:P

関連する問題