madf: (Default)
Я завжди знав що тема часових поясів у програмуванні — це пекельні котли і авгієві конюшні (разом з темою локалізації), тому старався уникати її. Коли знайомі адміни дорікали мені за логи у UTC я казав що Грінвіч рулить (не коньяк) і взагалі у логах які скачуть туди-сюди двічі на рік фіг що знайдеш потім. Плюс там всякі політичні складові — переходити, чи не переходити... Тож уникав я цієї теми довго, поки не стикнувся з податковою службою Грузії. Не вдаючись у подробиці, знадобилось на одному проекті зафігачити кастомні часові пояси для перегляду певної статистики. Ржака в тому, що українські користувачі взагалі не скаржилися на час у UTC (відношення було приблизно таке: „лишь были б желуди, ведь я от них жирею“), російські користувачі трохи скаржились що треба перераховувати локальний час щоб подивитись статистику за добу, а грузини покликали на поміч своїх податківців і категорично відмовились щось там рахувати. Ну в принципі, позиція правильна. Я теж завжди кажу що це задача комп’ютера щось там рахувати — він для того створений був.
Read more... )
madf: (Default)
Колись я вже цікавився темою локалей. Сьогодні LOR вирішив одну з найбільших моїх проблем при роботі з локалями у C++.

Re: std::cout вместе с std::wcout
во первых - установите локали, и для C и для C++
 // set up locale
 std::clog << "libc locale: " << std::setlocale(LC_ALL, "") << std::endl; // setup C rtl locale
 std::locale::global(std::locale("")); // setup C++ rtl global default locale
 std::clog << "std C++ locale: " << std::locale().name() << std::endl;


во вторых - установите локаль для потоков ввода-вывода

 std::cout.imbue(std::locale());
 std::cerr.imbue(std::locale());
 std::clog.imbue(std::locale());
 
 std::wcout.imbue(std::locale());
 std::wcerr.imbue(std::locale());
 std::wclog.imbue(std::locale());


и в третьих - отсоедините потоки ввода-вывода C++ от потоков ввода-вывода C библиотеки

 // for correct io with wcin/wcout
 std::ios::sync_with_stdio(false); // not needed if used only w* streams


Джерело: http://www.linux.org.ru/view-message.jsp?msgid=3691230#3691831

codecvt

Feb. 24th, 2008 01:56 pm
madf: (Default)
Итак, встала тривиальная задача: преобразовать строку из многобайтной в "широкую" и обратно.
madf: (Default)
Итак, std::wstring нужен только для корректного разбиения строки в многобайтной кодировке на символы. Для вывода таких строк не подходят стандартные потоки. Но в пространстве имен std определены и потоки для работы с "широкими" строками, например, std::wcout.
Вчера наткнулся на 2 особенности работы этих потоков.

Profile

madf: (Default)
madf

April 2018

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 22nd, 2025 01:10 pm
Powered by Dreamwidth Studios