HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Матюгальник - проблемы с чтением русского текста из потока
  #1  
Старый 21.07.2009, 14:38
Atrill
Новичок
Регистрация: 14.05.2009
Сообщений: 7
С нами: 8944335

Репутация: 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..
 
Ответить с цитированием

  #2  
Старый 21.07.2009, 16:43
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

Скорее всего там кодировка UTF-8 в которой русские символы кодируются 2-мя байтами, а англ - одним. Так что считывай 1 символ. если это UTF8 то считывай второй символ и декодируй в один.
 
Ответить с цитированием

  #3  
Старый 22.07.2009, 13:04
Atrill
Новичок
Регистрация: 14.05.2009
Сообщений: 7
С нами: 8944335

Репутация: 0
По умолчанию

Как я могу узнать когда следующий символ занимает два байта? В никсах каждый раз по разному, например, "." - занимает один байт, а "ф" - два.
 
Ответить с цитированием

  #4  
Старый 22.07.2009, 13:39
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

все символы с кодом > 0x7F кодируются двумя байтами.
т.е. считываешь 1 символ. Если его код < 0x80 то символ таким и остаются.
В противном случае считываешь второй символ и эти 2 символа конвертиш из UTF-8 в ANSI
 
Ответить с цитированием

  #5  
Старый 22.07.2009, 14:23
Atrill
Новичок
Регистрация: 14.05.2009
Сообщений: 7
С нами: 8944335

Репутация: 0
По умолчанию

Огромное спасибо. Пригодится, ведь, не только для матерящихся программ. +1
 
Ответить с цитированием

  #6  
Старый 22.07.2009, 18:30
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
С нами: 9023100

Репутация: 395


По умолчанию

эмм такие строки подходят под определение мультибайтовых... в общем крайне неудобная штука
вот одно обсуждение нашел http://www.linux.org.ru/view-message.jsp?msgid=3035365
в php с такими строками работашь как mb_*(); в windows MultiByteToWideChar и тд... а вот в unix я еще не писал хех
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приобрету скрипт для рандома текста: синонимами, заменяющими буквы русского текста на writtengen Freelance - О Работе 7 26.05.2009 12:27



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.