Delphi BlueTooth Android UTF8

02/11/2021

0

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;
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

Vtrx

Responder

Posts

03/11/2021

Vtrx

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;
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
...


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar