我试图通过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。
答案 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)