1. На Delphi :
Перевожу русские буквы в base64, и отправляю в сокет ...Socket.Connections[i].SendText(AnsiToBase64('ваш текст' + '@')),
где например @ --- дополнительно обозначаю конец текста
function AnsiToBase64(S : String):String;
var
SS : string;
begin
SS:=Utf8Encode(S);
SS:=EncodeBase64(SS);
result:=SS;
end;
где, Utf8Encode --- стандартная ф-ция библиотеки System
EncodeBase64 :
function EncodeBase64(Value: String): String;
const
b64alphabet: PChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
pad: PChar = '====';
function EncodeChunk(const Chunk: String): String;
var
W: LongWord;
i, n: Byte;
begin
n := Length(Chunk); W := 0;
for i := 0 to n - 1 do
W := W + Ord(Chunk[i + 1]) shl ((2 - i) * 8);
Result := b64alphabet[(W shr 18) and $3f] +
b64alphabet[(W shr 12) and $3f] +
b64alphabet[(W shr 06) and $3f] +
b64alphabet[(W shr 00) and $3f];
if n <> 3 then
Result := Copy(Result, 0, n + 1) + Copy(pad, 0, 3 - n);
end;
begin
Result := '';
while Length(Value) > 0 do
begin
Result := Result + EncodeChunk(Copy(Value, 0, 3));
Delete(Value, 1, 3);
end;
end;
********************************************
2. На мобильном клиенте
Считываю данные,
Function ReadData():string;
var
k, i : integer;
S:string;
begin
S:='';
K:=0;
i:=binsock.available;
if i=(-1) then
begin
... ОШИБКА ПОЛУЧЕНИЯ ДАННЫХ
end ELSE if i<>0 then
BEGIN
K:=0;
repeat
while ((ConnectError=true) and (binsock.available<>0) and (chr(k)<>'@')) do
begin
k := binsock.read_byte;
if k=(-1) then
begin
... ОШИБКА ПОЛУЧЕНИЯ ДАННЫХ
end else
if chr(k)<>'@' then S := S + chr(k);
end;
until ((ConnectError=false) or (chr(k)='@'));
END;
ReadData:=S;
end;
Разкодирую данные в utf с помощью библиотеки proweb
http://forum.boolean.name/showthread.php?t=8417
S:=base64_decode(S);
S:=encode(S, 'utf-8', 'ошибка');
P.S. Как правило работает на всех телефоннах