Delphi BlueTooth Android UTF8
Estou desenvolvendo um aplicativo de comunicação via BlueTooth com um dispositivo,os comandos estão ok,mas é muito útil que eu transfira e receba texto,e utilizando as rotina que tenho me deparei com um problema de decodificação nos caracteres acentuados(português).
A rotina que uso é essa;
Não consigo imaginar uma saida para as letras acentuadas,que aparecem duas juntas ''erradas''.
Alguém tem uma ideia de implementação?
A rotina que uso é essa;
function TBTMethod.SendData( nPair:integer; sData:string ) : Boolean;
var
ToSend: TBytes;
LDevice: TBluetoothDevice;
begin
result := FALSE;
if ManagerConnected then
try
if (FSocket = nil) or ( ItemIndex <> nPair ) then
begin
if nPair > -1 then
begin
LDevice := FPairedDevices[ nPair ] as TBluetoothDevice;
FSocket := LDevice.CreateClientSocket( StringToGUID( FServiceGUID ), False);
if FSocket <> nil then
begin
ItemIndex := nPair;
FSocket.Connect;
ToSend := TEncoding.GetEncoding(860).GetBytes( sData );
FSocket.SendData(ToSend);
result := TRUE;
end
else
ShowMessage(''Out of time -15s-'');
end
else
ShowMessage(''No paired device selected'');
end
else
begin
ToSend := TEncoding.UTF8.GetBytes( sData );
FSocket.SendData(ToSend);
result := TRUE;
end;
except
on E : Exception do
begin
ShowMessage(E.Message);
FreeAndNil(FSocket);
end;
end;
end;Não consigo imaginar uma saida para as letras acentuadas,que aparecem duas juntas ''erradas''.
Alguém tem uma ideia de implementação?
Vtrx
Curtidas 0
Respostas
Vtrx
02/11/2021
Estou desenvolvendo um aplicativo de comunicação via BlueTooth com um dispositivo,os comandos estão ok,mas é muito útil que eu transfira e receba texto,e utilizando as rotina que tenho me deparei com um problema de decodificação nos caracteres acentuados(português).
A rotina que uso é essa;
Não consigo imaginar uma saida para as letras acentuadas,que aparecem duas juntas ''erradas''.
Alguém tem uma ideia de implementação?
A rotina que uso é essa;
function TBTMethod.SendData( nPair:integer; sData:string ) : Boolean;
var
ToSend: TBytes;
LDevice: TBluetoothDevice;
begin
result := FALSE;
if ManagerConnected then
try
if (FSocket = nil) or ( ItemIndex <> nPair ) then
begin
if nPair > -1 then
begin
LDevice := FPairedDevices[ nPair ] as TBluetoothDevice;
FSocket := LDevice.CreateClientSocket( StringToGUID( FServiceGUID ), False);
if FSocket <> nil then
begin
ItemIndex := nPair;
FSocket.Connect;
ToSend := TEncoding.GetEncoding(860).GetBytes( sData );
FSocket.SendData(ToSend);
result := TRUE;
end
else
ShowMessage(''Out of time -15s-'');
end
else
ShowMessage(''No paired device selected'');
end
else
begin
ToSend := TEncoding.UTF8.GetBytes( sData );
FSocket.SendData(ToSend);
result := TRUE;
end;
except
on E : Exception do
begin
ShowMessage(E.Message);
FreeAndNil(FSocket);
end;
end;
end;Não consigo imaginar uma saida para as letras acentuadas,que aparecem duas juntas ''erradas''.
Alguém tem uma ideia de implementação?
Acabei achando o meu erro...
Tenho que alterar também na linha;
...
else
begin
ToSend := TEncoding.UTF8.GetBytes( sData );//faltou alterar aqui também.
FSocket.SendData(ToSend);
result := TRUE;
end
...
GOSTEI 0