0

while !eof ループを使用して .txt ファイルから wstring を読み取っています。

std::wifstream fileStream(path);
std::wstring input;
 while (fileStream.eof() == false) {
 getline(fileStream, input);
 text += input + L'\n';
}

しかし、wcout で印刷すると、一部の文字が別の文字に変換されます。これまでのところ、č は e (後ろ向きのコンマが上にある)、ě は i (後ろ向きのコンマが上にある)、そして š はエラー文字になっています。最初に、フォーマットの問題が疑われました。しかし、文字列を新しい .txt ファイルに書き込むと、まったく問題ありません。

また、私は_setmode(_fileno(stdout), _O_U8TEXT);wcout を動作させるために使用しています。

4

2 に答える 2

0

ファイルをバイナリとして読み取り、win32 API の MultiByteToWideChar 関数を使用して wstring に変換することで解決しました。

std::ifstream fileStream(path, std::ios::binary | std::ios::ate);
auto size = fileStream.tellg();
fileStream.seekg(0, std::ios::beg);

LPCCH memory = new CCHAR[size];

fileStream.read((char*)memory, size);

text.resize(size);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, memory, size, (LPWSTR)text.c_str(), text.length());
delete[] memory;
于 2016-06-02T15:27:33.403 に答える
-1

これがあなたの問題の原因かどうかはわかりませんが...

あなたが書くなら

 while (fileStream.eof() == false) {
 getline(fileStream, input);
 text += input + L'\n';
}

最後の行を超えて読み込もうとするまでfilestream.eof()は、最後の行を 2 回読むことになります。false

次のようなことをお勧めします

 while ( getline(fileStream, input) )
    text += input + L'\n';

ps: 下手な英語でごめんなさい

于 2016-06-01T16:57:56.680 に答える