On 2009.12.09 at 21:49:02 +0900, Alexander Danilov wrote: > Victor Wagner пишет: > >> >> Глубокое непонимание всеми невиндовыми программистами тонкой разницы >> между ANSI и OEM кодировками в винде. Из-за чего пользоваться >> портированными на винду консольными программами можно только если тебе >> не нужны иные кодовые страницы кроме CP1252. >> >> > > Виктор, просветите по поводу разницы, действительно интересно. >
А я - тоже невиндовый программист. Я знаю только то что в виндах есть две кодировки. В одной консольная программа получает параметры командной строки, в ней же она передает данные в системные вызовы вроде open (то что open в виндах библиотечная функция, а системный вызов CreateFile существует в двух вариантах, один из которых использует эту кодировку , а второй UCS2LE пока опускаем), в другой происходит ввод-вывод на консоль по умолчанию. Та кодировка, в которой работают системные вызовы и параметры называется ANSI, втоая - OEM. Вообще говоря, кодировка консоли может быть вообще третьей. Потому что её можно переключать командой chcp. И есть отдельный системный вызов, который позволяет её узнать - GetConsoleCP. Для того чтобы портированная программа могла со всем этим хозяйством аккуратно работать, требуется аккуратная поддержка всего этого как в самой программе, так, желательно и в libc. В cygwin-овской libc с этим все плохо. В mingw32-шной получше, но тоже не очень. Единственный grep который в винде умеет нормально работать с русскими буквами, который я видел, был из GnuWin32. И то - на консоль он писал в ANSI-кодировке. Ну и еще почему-то никто пока не удосужился реализовать для виндов эмуляцию iconv с использованием её родного MultibyteToWideChar, а вместо этого таскают с собой толстенную libiconv. Ну то есть перенастроить ка > -- > To UNSUBSCRIBE, email to [email protected] > with a subject of "unsubscribe". Trouble? Contact [email protected] > -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

