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