Показать сообщение отдельно
Старый 27.04.2012, 18:47   #10
AssA
AnyKey`щик
 
Аватар для AssA
 
Регистрация: 31.07.2011
Сообщений: 10
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет

добрый день
спасибо за либу, пользую, работает отлично.

есть вопрос:
присылаю с сервера (delphi 2007, ServerSocket) текст с русскими буквами:

тел. НОКИА:
текст в ANSI: read_bin возвращает в строке символы ANSI, читаю посимвольно, преобразую в UTF8 - вопросов нет.
текст в UTF8: русские буквы приходят по 2 байта (как и положено)

тел. LG:
текст в ANSI: read_bin возвращает только часть строки ДО первой русской буквы
текст в UTF8: принимает на ура, даже преобразовывать ничего не надо.

ВОПРОС
каким образом можно оптимально заставить оба тел работать? сам я решение предполагаю, и не одно, но они мне не нравяться. LG при получении бинарного потока корректно распознает в нем русские буквы при копировании в строку, нокиа же, просто раскладывает - в каждый символ один байт.

буду признателен всем ответившим.


привожу свою функцию для преобразования данных из сокета в utf8 с русскими символами, может пригодиться кому нибудь. (функция фильтрует управляющие символы. этой же функцией можно читать русский текст из RecordStore)

function scr_frBIN(s: string): string; // (from BIN, ANSI to UTF)
var
  i,l,co: integer;
  ch: char;
  re: string;
begin
  re:= '';
  l:= length(s)-1;
  for i:=0 to l do begin
    ch:= getChar(s,i);
    co:= ord(ch);
    if co>31 then 
      if co<127 then re:= re+ch
      else if co>191 then re:= re+chr(co+848)
        else if co=168 then re:= re+chr(1025)
          else if co=184 then re:= re+chr(1105);
  end;
  scr_frBIN:= re;
  re:= '';
end;
(Offline)
 
Ответить с цитированием