Hatred's Log Place

DON'T PANIC!

Aug 29, 2014 - 1 minute read - programming c++

MinGW и локали

Если коротко, то всё, что связано с std::locale в MinGW не работает. Точка.

Зато вполне себе работает функционал из Си:

std::locale::global(std::locale("")); // не установит текущую локаль
setlocale(LC_ALL, ""); // установит текущую локаль, у меня это Russian_Russia.Cp1251

Ну и прицепом, что бы определить текущую кодировку не получится воспользоваться функционалом nl_langinfo():

const char *charset = nl_langinfo(CODESET);

его просто нет. Зато есть, в комплекте, libcharset, идущая вместе с GNU libiconv (в некоторых дистрибутивах Linux она тоже есть). Нужно только не забывать линковаться с iconv:

-liconv

Сам код:

#include <charset.h>
...
const char *charset = locale_charset(); // вернёт CP1251 для русской локали

Почти то же самое, на английском: http://www.haible.de/bruno/packages-libcharset.html