Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TICQClient [D7, Win2k, WinXP]


IntruderLab ©   (2008-03-02 11:41:00) 

Изменил все строки в компоненте, которые отвечали за правильный коннект к серверу, теперь есть другая проблема-не видит русского языка и в принципе английского тоже:приходят сообщения в неправильной кодировке. Как решить проблему?


kolyann__   (2008-05-29 21:31:00) [1]

А можно пападробней об перекодирование unicod'a в обычный string ? ?


han_malign   (2008-05-29 16:31:00) [2]


> #0'!'#4'2'#4'E'#4'>'#4'4'#0'/'#0':'#0')'

енто - UCS16(#4 - как раз русская страница), в простонорадье Unicode,
если сначала четные с нечетными байты местами поменять - то приведенеие к WideChar прокатит...

З.Ы. вообще то в заголовке пакета кодировка указывается...
1-й канал данных
     TLV(2)
             TLV($101)
                   Encoding: Word
                   CodePage: Word
                   data...
(Encoding = 2) - Unicode


kolyann__   (2008-05-29 15:36:00) [3]

Есть проблемка. Приходят корявые соабщения с инфума,
вот что в отладчике:
#0'!'#4'2'#4'E'#4'>'#4'4'#0'/'#0':'#0')'
Если это прогнать через UTF8ToStr(Msg)  - то вылетит ошибка...


kolyann__   (2008-05-29 14:14:00) [4]

благодарю


TForumHelp   (2008-05-25 14:52:00) [5]

Залезь в ICQWorks.pas, найди процедурку procedure CreateCLI_SETUSERINFO(Pkt: PRawPkt;IsMTNEnabled : Boolean; XStatus: Byte; var Seq: Word);и убери строки:


CapPrefixes[11]+
CapPrefixes[12]+
GetNewCap(#$13#$4E)+


may be I am noob...   (2008-05-24 17:10:00) [6]

на

вставь в ICQWorks

function UTF8ToStr(Value: String): String;
function UTF8ToStrSmart(Value: String): String;

function UTF8ToStr(Value: String): String;
var
 buffer: Pointer;
 BufLen: LongWord;
begin
 BufLen := Length(Value) + 4;
 GetMem(buffer, BufLen);
 FillChar(buffer^, BufLen, 0);
 MultiByteToWideChar(CP_UTF8, 0, @Value[1], BufLen - 4, buffer, BufLen);
 Result := WideCharToString(buffer);
 FreeMem(buffer, BufLen);
end;

function UTF8ToStrSmart(Value: String): String;
var
 Digit: String;
 i: Word;
 HByte: Byte;
 Len: Byte;
begin
 Result := '';
 Len := 0;
 if Value = '' then Exit;
 for i := 1 to Length(Value) do
 begin
   if Len > 0 then
   begin
     Digit := Digit + Value[i];
     Dec(Len);
     if Len = 0 then
       Result := Result + UTF8ToStr(Digit);
   end else
   begin
     HByte := Ord(Value[i]);
     if HByte in [$00..$7f] then       //Standart ASCII chars
       Result := Result + Value[i]
     else begin
       //Get length of UTF-8 char
       if HByte and $FC = $FC then
         Len := 6
       else if HByte and $F8 = $F8 then
         Len := 5
       else if HByte and $F0 = $F0 then
         Len := 4
       else if HByte and $E0 = $E0 then
         Len := 3
       else if HByte and $C0 = $C0 then
         Len := 2
       else begin
         Result := Result + Value[i];
         Continue;
       end;
       Dec(Len);
       Digit := Value[i];
     end;
   end;
 end;
end;


затем идешь в ICQClient
ищешь:
if Assigned(OnMessageRecv) then
 FOnMsg(Self, Msg, UIN);


заменяешь на:
if Assigned(OnMessageRecv) then
 FOnMsg(Self, UTF8ToStr(Msg), UIN);


все робит ништяк.


Eraser   (2008-05-24 03:11:00) [7]

> [0] IntruderLab   (02.03.08 11:41)

на сколько я знаю, там еще много чего переделывать прийдется, лучше оринетируйся на исходники миранды.
насчет кодировки - вроде они на юникод перешли.


kolyann__   (2008-05-24 00:44:00) [8]

Сергей М., а как?? На некоторых форумах дают функции па удалению #0 байта (паидее там и #4 есть), но этого мало, можеш пападробнее...?


Сергей М.   (2008-03-03 09:58:00) [9]


> Как решить проблему?


Перекодировать принятый текст в "правильную" кодировку.


Наверх

Титульная страница Поиск, карта сайта Написать письмо