Привет. Вот описание моей проги: Code: /** * matygalnik (матюгальник) * * usage * stdin | matyk | stdout * for example see how using grep command * используйте так же как комманду grep * заменяет некоторую часть слов на матерные * * скомпелируйте программу с опцией -D HTML=1 если хотите * конвертировать web-страницы * * author Atrill * version 0.7.4 * copyright GPL 2 * date 28.06.2009 */ Проблема в том, что я не могу прочитать поток функцией getc в никсах, т.к. там с кодировкой непонятно что. Думал что каждый символ нормально занимает 2 байта - нет. Одни символы занимают 1 байт, а другие 2. Пока всё работает, но всё же хотелось бы читать поток через getc отдельными символами. Кто-нибудь подскажет как это сделать? Исходники прилагаются. http://rapidshare.com/files/258286776/matyuk.tar.gz.html MD5: E066B1111559B1FD939CDEEC6B45254B
Скорее всего там кодировка UTF-8 в которой русские символы кодируются 2-мя байтами, а англ - одним. Так что считывай 1 символ. если это UTF8 то считывай второй символ и декодируй в один.
Как я могу узнать когда следующий символ занимает два байта? В никсах каждый раз по разному, например, "." - занимает один байт, а "ф" - два.
все символы с кодом > 0x7F кодируются двумя байтами. т.е. считываешь 1 символ. Если его код < 0x80 то символ таким и остаются. В противном случае считываешь второй символ и эти 2 символа конвертиш из UTF-8 в ANSI
эмм такие строки подходят под определение мультибайтовых... в общем крайне неудобная штука вот одно обсуждение нашел http://www.linux.org.ru/view-message.jsp?msgid=3035365 в php с такими строками работашь как mb_*(); в windows MultiByteToWideChar и тд... а вот в unix я еще не писал хех