Как написать Windows-936, чтобы войти Когда wchar_t в коде по boost.log
Следуйте на 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). Не могли бы вы помочь мне?
1 ответ
Boost.Log полагается на локаль, которую вы предоставляете для выполнения преобразования символов. Так что вам нужно либо правильно настроить Boost.Locale, либо написать codecvt
позаботься о себе. В частности, в Windows Boost.Locale должен быть настроен с бэкэндом, отличным от WinAPI, поскольку в соответствии с документами бэкэнд WinAPI не поддерживает многобайтовые кодировки не-UTF8. Документы также содержат несколько примеров выбора бэкэнда, но вам может понадобиться, например, построить Boost.Locale с ICU.