-1

关注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。但我希望"汉字"sample.log中的 应该是0xbaba 0xd7d6,解析为windows-936(同GBK,GB2312)。你可以帮帮我吗?

4

1 回答 1

1

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

于 2018-05-25T21:49:12.077 回答