|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
ощибка кодировки русских 6укв
написал чат на делфи2009.. использовал idUDP.
клиент отправляет мисаги: Код:
procedure TForm4.Button2Click(Sender: TObject); begin idUDPClient1.Send(nick+'^ '+edit1.Text); edit1.Clear; end; сервак соответсвенно принимает текст, каторый мы о6ра6атываем и суем в мемо: procedure TForm4.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; AData: TBytes; ABinding: TIdSocketHandle); begin memo1.Lines.Add(stringof(adata)); end; Проблема в том что когда печатаешь на русском, русские символы кодируются вопросиками, а англиские норм. Выходит типа: nick:go ????? ??? Где оши6ка? Как правильно кодировать? вроде юникод поддерживает русские 6уквы.. прошу помочь.) чат прикрепил. Последний раз редактировалось Admin, 13.04.2010 в 22:47. |
#2
|
|||
|
|||
Дельфи-то поддерживает.
А вот Indy, похоже, нет. Попробуй без юникода (т.е. принудительно поставь тип AnsiString). Или "заворачивай" byte-array строки в Base64. |
#3
|
|||
|
|||
ansistring не помог.
гдето на форумах увидел мисагу типа Код:
В idUDP, если не ошибаюсь, по дефолту используется TEncoding.ASCII и с ним как раз все русские символы приходят в виде $3F, причем "бьются" они в момент преобразования к массиву байт. А если отправлять вот так: IdUDPClient.Send('Проверка Test', TEncoding.UTF8); то нормально:) но у Сэнда нету такого параметра как Tencoding... Но я упрямый и методом про6 и оши6ок выяснил что idUDPClient.send отправляет текст непонятно какой кодировкой ( по идее должен 6ыть юникод..) и не понятно как. По этому отсылаемый текст я сначало конвертировал в байты ( bytesof()) а потом отослал его через idUDPClient.SentBuffer() и вуа-ля все канает .) код клиента Код:
procedure TForm4.Button2Click(Sender: TObject); begin idUDPClient1.SendBuffer(bytesof(nick+'^ '+edit1.Text)); edit1.Clear; end; код сервера Код:
procedure TForm4.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; AData: TBytes; ABinding: TIdSocketHandle); begin memo1.Lines.Add (stringof(aData)); end; но если кто знает как это все о6ойти и сделать проще, или как использовать TEncoding, прось6а отписать .)) Последний раз редактировалось beavi5, 14.04.2010 в 16:10. |
#4
|
|||
|
|||
............. прось6а админа удалить данную месагу(#4). опера глюканула.
Последний раз редактировалось beavi5, 14.04.2010 в 15:59. |
#5
|
||||
|
||||
lmikle правильно тебе сказал, используй кодировку Base64. А лучше передавай заместо строк массивы байт, как в твоем последнем случае.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |