c ++ unicode写不起作用

时间:2012-04-12 09:20:08

标签: c++ unicode

我试图通过wfstream在文件中写一些俄语unicode文本。以下代码已被用于它。

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。

3 个答案:

答案 0 :(得分:1)

我不太了解在C ++中使用语言环境,但也许它不起作用,因为你试图用希腊语语言环境编写西里尔字符?

答案 1 :(得分:1)

如果您使用std::locale("Russian"),则在使用VS2008时,该文件将被编码为“西里尔语(Windows)”(而不是某些Unicode格式)。例如,如果您使用Internet Explorer打开它并将编码更改为Cyrillic(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 或者自己实现类似的东西(通过查看http://www.boost.org/doc/libs/1_40_0/boost/detail/utf8_codecvt_facet.hpp它似乎并不复杂)。

或者这个图书馆:http://utfcpp.sourceforge.net/

答案 2 :(得分:0)