Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с русскими буквами в 'recv()' 
:(
    Опции темы
IL3
Дата 12.4.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



Собственно функция recv(), нормально принимает текст, только русские буквы там выглядят примерно так:
Код

Р РчР·С_Р_Рч. Р'Р°Р_Рє С_РчР·С_Р_Рч - РїР_С_Р>РчР_Р_РёРч РїР_С_С'С_РїР>РчР_РёС_

Расскажите пожалуйста как с этим бороться?
PM MAIL   Вверх
Greeen
Дата 13.4.2007, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: нет
Всего: 18



Значит не нормально принимает. Сервер тобой написан? Показывай код отправки и приема.

Это сообщение отредактировал(а) Greeen - 13.4.2007, 06:57


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
IL3
Дата 13.4.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



Сервер написан не мной. Это Apache. Код приема:
Код

  while (1)
  {
     ret = recv(s, buf, sizeof(buf), 0);
     if (ret > 0)
       printf("%s", buf);
     else
       break;
  }

Почему так происходит с русскими буквами?    

PM MAIL   Вверх
IL3
Дата 13.4.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



Ух ты, странные вещи творятся! Far не показывает русские буквы, а Блокнот вполне. Кто нибуль объясните мне что это все значит???

Это сообщение отредактировал(а) IL3 - 13.4.2007, 17:34
PM MAIL   Вверх
_hunter
Дата 13.4.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



это значит что в Far'е кодировку переключить нужно...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
AndreyK
Дата 13.4.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 15.3.2007

Репутация: нет
Всего: нет



это юникод...его можно в ASCII переделать:

wchar_t utext[1000]; //юникод
char text[1000];       //обычный текст ascii

MultiByteToWideChar(1251,NULL,text,-1,utext,1000);

//1251 - кодировка WIN-1251 (RUS)


Это сообщение отредактировал(а) AndreyK - 13.4.2007, 17:39
PM MAIL   Вверх
IL3
Дата 13.4.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



Дело в том, что переключение кодировки в Far'е с DOS на Win по клавише F8 не помогает.
Или я как-то не так переключаю? А в программе эти символы будут обрабатываться нормально? 
PM MAIL   Вверх
AndreyK
Дата 13.4.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 15.3.2007

Репутация: нет
Всего: нет



Чтоб напечатать юникод надо использовать не 

printf("%s", buf);
а
wprintf(L"%s",(wchar_t *)  buf);

PM MAIL   Вверх
IL3
Дата 13.4.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



Мда, таким образом русские буквы вообще игнорируются...

Добавлено через 11 минут и 46 секунд
Так вот, у меня без Unicode все нормально выводит, только Far не читает. Меня интерисует, будут ли эти буквы обрабатываться в моей программе? Если я, скажем, занесу весь текст в массив и захочу достать из него все русские буквы?

Это сообщение отредактировал(а) IL3 - 13.4.2007, 18:08
PM MAIL   Вверх
586
Дата 13.4.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(AndreyK @  13.4.2007,  18:52 Найти цитируемый пост)
Чтоб напечатать юникод надо использовать не 

printf("%s", buf);
а
wprintf(L"%s",(wchar_t *)  buf);

Нет. Если печатаешь юникод, ставишь %S, если ANSI, то %s.
PM   Вверх
AndreyK
Дата 13.4.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 15.3.2007

Репутация: нет
Всего: нет



почему русские буквы не изображаются?
Наверное кодировка какая ни будь не та ... точно не знаю как у потока вывода кодировку менять...

Я обычно перевожу всё в ascii (там как раз можно указать правильную кодировку), а потом уже  анализирую или изображаю где-то... 

PM MAIL   Вверх
IL3
Дата 13.4.2007, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



AndreyK,  а как все перевести в ASCII?
PM MAIL   Вверх
586
Дата 13.4.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



используй функцию CharToOem.
PM   Вверх
AndreyK
Дата 13.4.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 15.3.2007

Репутация: нет
Всего: нет



Цитата

AndreyK,  а как все перевести в ASCII?


Я в верхнем посте это написал, вот ещё раз:

wchar_t utext[1000]; //юникод
char text[1000];       //обычный текст ascii

MultiByteToWideChar(1251,NULL,text,-1,utext,1000);

//1251 - кодировка WIN-1251 (RUS)


PM MAIL   Вверх
IL3
Дата 13.4.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



586 и AndreyK, так какую же функцию мне лучше использовать и в чем их отличия? И что такое OEM?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.