首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++ unicode写入不起作用

c++ unicode写入不起作用
EN

Stack Overflow用户
提问于 2012-04-12 17:20:08
回答 2查看 1.6K关注 0票数 1

我正试着用wfstream在文件中写一些俄文unicode文本。下面这段代码已经被使用过了。

代码语言:javascript
复制
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();

通过执行此代码,无法识别的内容被写入文件,我使用的是VS2008。

EN

回答 2

Stack Overflow用户

发布于 2012-04-12 17:23:01

我不太了解如何在C++中注入语言环境,但也许是因为您试图使用希腊语言环境来编写西里尔文字符,所以它不能正常工作?

票数 1
EN

Stack Overflow用户

发布于 2012-04-12 18:08:40

如果你使用std::locale("Russian"),那么当你使用VS2008时,文件将被编码为“西里尔字母(视窗)”(而不是某种Unicode格式)。例如,如果您使用Internet Explorer打开它,并将编码更改为西里尔文(Windows),则字符将变为可见。

更常见的是以某种Unicode格式存储文件。

当我使用:

代码语言:javascript
复制
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/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10120775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档