Кодировка символов stdout и stderr - PullRequest
3 голосов
/ 18 мая 2010

Я работаю с библиотекой строк C ++, которая имеет 4 основных класса, которые работают со строками ASCII, UTF8, UTF16, UTF32, каждый класс имеет функцию Print, которая форматирует входную строку и печатает результат в stdout или stderr. моя проблема в том, что я не знаю, какова кодировка символов по умолчанию для этих потоков.

Пока мои классы работают в Windows, позже я добавлю поддержку для Mac и Linux, так что если вы знаете что-нибудь об этой потоковой кодировке, я буду признателен.

поэтому мой вопрос: какова кодировка по умолчанию для stdout и stderr и могу ли я изменить эту кодировку позже, и если да, что будет с данными, хранящимися там?

спасибо.

Ответы [ 2 ]

4 голосов
/ 18 мая 2010

stdout и stderr используют "C" локаль. «C» локаль является нетуральной, и в большинстве систем переведена на локаль текущего пользователя. Вы можете заставить программу использовать определенную локаль, используя функцию setlocale:

// Set all categories and return "English_USA.1252"
setlocale( LC_ALL, "English" );
// Set only the LC_MONETARY category and return "French_France.1252"
setlocale( LC_MONETARY, "French" );
setlocale( LC_ALL, NULL );

Поддерживаемые строки локали зависят от системы и компилятора. Требуется поддержка только "C" и "".

http://www.cplusplus.com/reference/clibrary/clocale/

0 голосов
/ 18 мая 2010

Вы можете взглянуть на этот SO-ответ (самый голосующий голос).

Это не совсем ваш вопрос, но он, безусловно, связан и дает много полезной информации.

Я не эксперт здесь, но я думаю, мы можем предположить, что вы должны использовать std::cout всякий раз, когда вы используете std::string и std::wcout всякий раз, когда вы используете std::wstring.

...