-
Постов
8 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Sergey Babichev
-
-
Проблема решена.
На сервере никаких преобразований не делается, а на клиенте поставил кодировку по умолчанию.s := idCl.Socket.ReadLnWait(3,IndyTextEncoding_OSDefault);
-
function TranslitStr(s:string) : string; const Rus = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; Eng = 'abcdefghijklmnopqrstuvwxyz~|@#$%&ABCDEFGHIJKLMNOPQRSTUVWXYZ{}[]?><'; var i,j : integer; c : char; begin Result := UTF8Encode(WideString(s)); end;
UnTranslitStr на клиенте сейчас не делает ничего
-
Код сервера
else if cmd = 'trafic' then begin DM.qPSI_TraficTest.ParamByName('stock').AsString := sl[3]; DM.qPSI_TraficTest.Open; while not DM.qPSI_TraficTest.Eof do begin responce := '*' + DM.qPSI_TraficTest.FieldByName('id').AsString+'*'+ TranslitStr(DecodeEventName(DM.qPSI_TraficTest.FieldByName('A_EVENT').AsInteger))+'*'+ TranslitStr(DM.qPSI_TraficTest.FieldByName('test').AsString)+'*'+ DM.qPSI_TraficTest.FieldByName('A_COUNT').AsString+'*'+ TranslitStr(DM.qPSI_TraficTest.FieldByName('zn').AsString)+'*'+ #$0d#$0a; OutputReport(responce); ClientSocket.SendText(responce); DM.qPSI_TraficTest.Next; end; DM.qPSI_TraficTest.Close; ClientSocket.SendText('EOF'+#$0d#$0a); ClientSocket.Disconnect(ClientSocket.Handle); end;
Код клиента
procedure TfRes.GetDetailTraffic(stk: string); var cmd,s : string; cnt : integer; begin if not Assigned(CurrServer) then Exit; cmd := '*'+imei+'*trafic*'+stk+'*'; cnt := 0; idCl.Host := IP; idCl.Port := StrToInt(CurrServer.port); idCl.Disconnect; while idCl.Connected do ; try ad.Show; idCl.Connect(); if idCl.Connected then begin idCl.Socket.Write(cmd); ad.Hide; pd.Show; repeat Sl.Clear; if not idCl.Connected then break; s := idCl.Socket.ReadLnWait(3,IndyTextEncoding_UTF8); if idCl.Socket.ReadLnTimedout then Exit; Inc(cnt); pd.Message := 'Получено '+IntToStr(cnt)+' записей'; // pd.Message := s; if s <> 'EOF' then begin RE.Subject := s; RE.Split(SL,0); if Sl.Count > 1 then begin AddTr(SL[1],UnTranslitStr(SL[2]),SL[4],UnTranslitStr(SL[3]),UntranslitStr(SL[5])); end; end; until s = 'EOF'; end; finally idCl.Disconnect; while idCl.Connected do ; ad.Hide; pd.Hide; end; end;
Скриншоты сервера и клиента
-
'*356495042155004* '#$fffd#$fffd#$fffd#$fffd#$fffd#$fffd' '#$fffd#$fffd#$fffd' '#$fffd#$fffd#$fffd#$fffd#$fffd#$fffd#$fffd#$fffd#$fffd#$fffd' '#$fffd#$fffd#$fffd#$fffd#$fffd#$fffd#$fffd#$fffd#$fffd'*-40*2*H7041300945*'
Вот что приходит в Инди
А сервер отправляет это:
*356495042155004* Таймер при включенном зажигании*-40*2*H7041300945*
И то и то в UTF-8. Должно быть во всяком случае.
-
Коллеги, подскажите, как связать заголовки столбцов у THeader с соответствующими колонками в TStringGrid?
Сетка не умещается в экран по ширине и скроллируется а Header стоит на месте.
Если использовать свойство Header у колонок вместо THeader а, то длинный заголовок в них не влезает. Есть способ задать ему форматирование - перенос по словам, выравнивание по центру?
-
Извините за дублирование, но я не знаю в какой кодировке она вообще приходит. Сервер берет данные из SQL Express и отправляет их в канал. Смотришь сервер в отладчике, в сокет идет нормальная строка. В Андроид из ИНДИ приходит хрень. Кто когда и как успел испортить?
-
Уважаемые коллеги!
Никак не получается прочитать из клиента русский текст. Читается что-то вроде #fff8.
Вышел из положения, написав две функции:function TranslitStr(s:string) : string; const Rus = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; Eng = 'abcdefghijklmnopqrstuvwxyz~!@#$%&ABCDEFGHIJKLMNOPQRSTUVWXYZ()_+?><'; var i,j : integer; c : char; begin Result := ''; for i := 0 to length(s)-1 do begin c := s.Chars[i]; if isLetter(c) then begin j := pos(c,Rus); if j > 0 then c := Eng[j]; end; Result := Result + c; end; end;
и обратную к ней.
function UnTranslitStr(s:string) : string; const Rus = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; Eng = 'abcdefghijklmnopqrstuvwxyz~!@#$%&ABCDEFGHIJKLMNOPQRSTUVWXYZ()_+?><'; var i,j : integer; c : char; begin Result := ''; for i := 0 to length(s)-1 do begin c := s.Chars[i]; if isLetter(c) then begin j := pos(c,Eng); if j > 0 then c := Rus[j-1]; end; Result := Result + c; end; end;
Ее вызывает сервер, когда отправляет данные на Андроид, обратная в Андроиде возвращает буквы на место.
Но так же быть не должно!
ключ SHA1 - как получить?
в Прочие вопросы
Опубликовано
Коллеги, не подскажете, как из xe7 получить sha1 для Google Map service? Эклипс его сам генерит в настройках проекта. В xe7 я не нашел где его получить.