1

ロシア語のユニコード テキストを wfstream でファイルに書き込もうとしています。次のコードが使用されています。

wfstream myfile;
locale AvailLocale("Russian");

myfile.imbue(AvailLocale);

myfile.open(L"d:\\example.txt",ios::out);
if (myfile.is_open()) 
{ 
    myfile << L"доброе утро" <<endl;
} 

myfile.flush();
myfile.close();

このコードを実行すると、認識できないものがファイルに書き込まれます。VS 2008 を使用しています。

4

2 に答える 2

1

VS2008 を使用するstd::locale("Russian")と、ファイルは「キリル文字 (Windows)」としてエンコードされます (一部の Unicode 形式ではありません)。たとえば、Internet Explorer で開いてエンコーディングをキリル文字 (Windows) に変更すると、文字が表示されます。

ファイルを何らかの Unicode 形式で保存する方が一般的です。

私が使用する場合:

const std::locale AvailLocale
      = std::locale(std::locale("Russian"), new std::codecvt_utf8<wchar_t>());

UTF-8として保存し、たとえばメモ帳でファイルをUTF-8ファイルとして開きます。見る доброе утро

同様に、codecvt_utf16 またはその他のコーディング スキームを使用して、Unicode 文字をエンコードできます。

codecvt_utf8 は C++11 に固有です。

別の方法として、 boostを使用することもできます : http://www.boost.org/doc/libs/1_46_0/libs/serialization/doc/codecvt.html doc/libs/1_40_0/boost/detail/utf8_codecvt_facet.hpp それほど複雑ではないようです)。

またはこのライブラリ: http://utfcpp.sourceforge.net/

于 2012-04-12T10:08:39.673 に答える
1

C++ でのロケールの組み込みについてはよくわかりませんが、ギリシャ語のロケールを使用してキリル文字を書こうとしているために機能しないのではないでしょうか?

于 2012-04-12T09:23:01.253 に答える