Как написать Windows-936, чтобы войти Когда wchar_t в коде по boost.log - PullRequest
0 голосов
/ 24 мая 2018

После 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 голосов
/ 26 мая 2018

Boost.Log зависит от локали, которую вы предоставляете для выполнения преобразования символов.Поэтому вам нужно либо правильно настроить Boost.Locale, либо написать фасет codecvt самостоятельно.В частности, в Windows Boost.Locale должен быть настроен с бэкэндом, отличным от WinAPI, потому что согласно docs бэкэнд WinAPI не поддерживает многобайтовые кодировки не-UTF8. docs также содержит несколько примеров выбора бэкэнда, но вам может понадобиться, например, построить Boost.Locale с ICU.

...