作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将 std::wclog
重定向到一个文件以登录我的程序:
std::wclog.rdbuf((new std::wofstream("C:\\path\\to\\file.log", std::ios::app))->rdbuf());
通过写入 std::wclog
进行记录:
std::wclog << "Schöne Grüße!" << std::endl;
令人惊讶的是,我发现该文件是用 ANSI 编写的。 (这对于 ofstream
和 clog
是完全可以接受的,但我曾期望 wofstream
和 wclog
产生某种unicode 输出。)我也希望能够登录 CYK 语言(例如用户输入),所以有没有办法让 wofstream
生成 UTF-8? openmode 标志似乎没有为此提供。
(如果没有平台无关的方式,我在Win7+ 64位。)
编辑:
上面的问题有错误。线路
std::wclog << "Schöne Grüße!" << std::endl;
应该是正确的
std::wclog << L"Schöne Grüße!" << std::endl;
这只是为了演示我想做什么,在现实生活中,写入 wofstream
的 wstring
来自提供翻译的类,例如
std::wclog << _(L"Best regards") << std::endl;
在哪里
#define _(X) i18n::translate(X)
class i18n {
public:
static std::wstring translate(const std::wstring&);
}
所以我想做的是使用 wofstring
将 wstring
写入 std::wclog
并将其放入文件中,并且该文件应该是 UTF-8 编码的(没有 BOM)。
最佳答案
您只需要使用 UTF8 文字,即:
std::wclog << u8"Schöne Grüße!" << std::endl;
结果会是
Schöne Grüße!
如果您混合使用 ASCII 和 UTF8 文字,例如:
std::wclog << "Schöne Grüße!" << std::endl << u8"Schöne Grüße!" <<
std::endl;
非 ASCII 字符将被替换。
Sch?ne Gr??e!
Schöne Grüße!
Unicode 文字已添加到 C++ 11。它们首先在 Visual Studio 2015 中实现。String and Character Literals page描述目前 Visual C++ 支持的文字。
关于c++ - 如何让 std::wofstream 写入 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38994511/
我是一名优秀的程序员,十分优秀!