Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Indy отпрвка строк в Unicode


Автор: klyaksa 3.9.2010, 15:41
Нужно отправлять строки по сети... Программа есть, работает, но на Дельфи 2006. Переделываю по 2009/2010.
Различие нашел вот в чем, было типа
Str:String;
IdTCPClient.IOHandler.WriteLn(Str);
Str := AContext.Connection.IOHandler.ReadLn;
станет типа
IdTCPClient.IOHandler.WriteLn(Str, enUTF8);
Str := AContext.Connection.IOHandler.ReadLn(enUTF8);
НО! Как я понимаю нужно еще в ручную перевести из String в enUTF8, а потом обратно? Автоматически оно не перекодируется? Как?

Ошибка при работе в том, что при наличии русского текста  в строке получаю в конце #$D#$A, при англ. все нормально.

Автор: xkor 3.9.2010, 19:08
klyaksa, а серверная то часть в какой кодировке текст принимает и отправляет?
Цитата(klyaksa @  3.9.2010,  15:41 Найти цитируемый пост)
НО! Как я понимаю нужно еще в ручную перевести из String в enUTF8, а потом обратно? Автоматически оно не перекодируется? Как?

для ответа на этот вопрос можно воспользоваться логикой которая говорит что если бы мы вручную перекодировали то нам незачем бы было указывать кодировку в этом методе, если с логикой хреново то можно просто посмотреть код этого метода и всё сразу станет ясно.

ЗЫ если серверная часть и для нового и для старого проекта одинаковая и в старом проекте вы в enUTF8 не переводили, то и тут надо в CP1251 а не enUTF8 переводить...

Автор: klyaksa 3.9.2010, 20:34
С логикой все более-менее (надеюсь более) нормально... 
#$D#$A появляется когда в тексте есть русские буквы, при анг, иероглифах  все нормально...
#$D#$A - как я понимаю это #13#10 которые добавляются к строке при передаче... Вот почему они в данном случае остаются?

Пока поставил костыль
function IdReadLn(IdIOHandler: TIdIOHandler): String;
begin
  Result := Trim(IdIOHandler.ReadLn(enUTF8));
end;

Но хочу разобраться в проблеме...

ЗЫ все части проекта переделаны...

Автор: Akella 5.9.2010, 19:15
klyaksa, читай
http://forum.vingrad.ru/forum/topic-237714.html
http://forum.vingrad.ru/forum/topic-126445.html

Автор: klyaksa 6.9.2010, 19:44
В свежей версии костыль не нужен... Вопрос снят.

Автор: Akella 7.9.2010, 09:51
klyaksa, у нас принято в током случае отмечать вопрос, как решенный, а не снимать его.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)