如何编写windows-936来记录当代码中的wchar_t由boost.log

时间:2018-05-24 13:35:20

标签: c++ logging boost wchar-t gbk

关注boost.log

sample.log 被解析为utf8。 现在我想在windows.936上写,但下面的代码是没用的。

void init_logging() {
    ...
    std::string strCodePage = boost::locale::util::get_system_locale();//strCodePage is "zh_CN.windows-936"
    std::locale loc = boost::locale::generator().generate(strCodePage);
    sink->imbue(loc);
    ...
}
void test_wide_char_logging() {
    ...
    const wchar_t national_chars[] = L"汉字";
    BOOST_LOG(lg) << national_chars;
    ...
}

例如,sample.log中的"汉字"0xe6b189 0xe5ad97,它被解析为utf8.But我希望sample.log中的"汉字"应为0xbaba 0xd7d6 },解析为windows-936(与GBK,GB2312相同)。 你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

Boost.Log依赖于您提供的语言环境来执行字符代码转换。因此,您必须正确配置Boost.Locale或自己编写codecvt方面。特别是在Windows上,Boost.Locale必须配置除WinAPI之外的后端,因为根据docs WinAPI后端不支持非UTF8多字节编码。 docs还包含一些选择后端的示例,但您可能需要使用ICU构建Boost.Locale。