ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
Матюгальник - проблемы с чтением русского текста из потока |

21.07.2009, 14:38
|
|
Новичок
Регистрация: 14.05.2009
Сообщений: 7
Провел на форуме: 25398
Репутация:
0
|
|
Матюгальник - проблемы с чтением русского текста из потока
Привет. Вот описание моей проги:
Код:
/**
* 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/25828677...uk.tar.gz.html
MD5: E066B1111559B1FD939CDEEC6B45254B
Последний раз редактировалось Atrill; 21.07.2009 в 14:43..
|
|
|

21.07.2009, 16:43
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Скорее всего там кодировка UTF-8 в которой русские символы кодируются 2-мя байтами, а англ - одним. Так что считывай 1 символ. если это UTF8 то считывай второй символ и декодируй в один.
|
|
|

22.07.2009, 13:04
|
|
Новичок
Регистрация: 14.05.2009
Сообщений: 7
Провел на форуме: 25398
Репутация:
0
|
|
Как я могу узнать когда следующий символ занимает два байта? В никсах каждый раз по разному, например, "." - занимает один байт, а "ф" - два.
|
|
|

22.07.2009, 13:39
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
все символы с кодом > 0x7F кодируются двумя байтами.
т.е. считываешь 1 символ. Если его код < 0x80 то символ таким и остаются.
В противном случае считываешь второй символ и эти 2 символа конвертиш из UTF-8 в ANSI
|
|
|

22.07.2009, 14:23
|
|
Новичок
Регистрация: 14.05.2009
Сообщений: 7
Провел на форуме: 25398
Репутация:
0
|
|
Огромное спасибо. Пригодится, ведь, не только для матерящихся программ. +1
|
|
|

22.07.2009, 18:30
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
эмм такие строки подходят под определение мультибайтовых... в общем крайне неудобная штука
вот одно обсуждение нашел http://www.linux.org.ru/view-message.jsp?msgid=3035365
в php с такими строками работашь как mb_*(); в windows MultiByteToWideChar и тд... а вот в unix я еще не писал хех
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|