0

CStdioFileを使用してテキストファイルを読み取り、出力は文字列ですが、ダイアログでファイルを選択したときに元のエンコードファイルを確認したい元のエンコードを確認するにはどうすればよいですか?

//これは私のコードです

if(dlg.DoModal() == IDOK)
{

    path = dlg.GetPathName(); //get file path
    CStdioFile pStdioFile1(path, CFile::modeRead);  
    char buff[BUFSIZ];

    while(!feof(pStdioFile1.m_pStream))
        {

            pStdioFile1.ReadString(Buff); //Buff is read text to string  
            msg += Buff;

            if(!feof(pStdioFile1.m_pStream))
            {
                msg += "\n";
            }

        }
4

2 に答える 2

1

できません。場合によっては、データに使用されているエンコーディングの表示が含まれていますが、実際にはそれに依存することはできません。Windowsは、IstextUnicode一部のテキストがユニコード(この場合はUTF-16を意味する)であるかどうかを推測するために提供しますが、1)それはUnicodeにのみ有効であり、2)結果はとにかく推測にすぎません。

余談ですが、ファイル全体を文字列に読み込むためのコードには興奮していません。ファイルがかなり小さいと予想されると仮定すると、私は通常、次のようなものを使用します。

std::ifstream in(dlg.GetPathName());
std::stringstream buffer;
buffer << in.rdbuf();

// now the content of the file is availble as `buffer.str()`.
于 2012-07-17T06:09:13.597 に答える
1

ファイルのBOM(バイト順マーク)を確認します(http://en.wikipedia.org/wiki/Byte_order_markを参照)。

ファイルにBOMが含まれていない場合は、8ビットのANSIファイルであると想定します。

それ以外の場合、BOMはファイルの形式を示します。リンクを確認してください。さまざまなBOMとその意味の優れた表が含まれています。

于 2012-07-17T06:55:22.783 に答える