Ir para conteúdo
  • Cadastre-se

dev botao

Protocolo de comunicação sendo quebrado por encoding


  • Este tópico foi criado há 2779 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Pessoal, boa tarde.

Baixei e compilei todo o projeto do ACBr em Lazarus 1.6 Windows.

Comecei a utilizar o modo de comunicação do ACBr Monitor Plus via TCP, para integrar minha aplicação feita em Java.

Até o momento tudo corria bem, mas agora me deparei com um problema, que acredito ser gerado pelo Lazarus.

Tenho uma impressora Bematech e uma Epson. Ambas tem formas de pagamento com acentuação já programas.

Quando obtenho junto ao ACBrMontiorPlus as formas de pagamento (comando ECF.CarregaFormasPagamento) o contrato de retorno está sendo quebrado.

Veja no seguinte exemplo de retorno:

OK:    1                       Dinheiro|   2V                       Cartão

Formatando melhor o retorno para verificarmos a falta de caracteres:

 IIIITDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
"   1                       Dinheiro"
"   2V                       Cartão"

Note que na descrição cartão está faltando um caracter, são na verdade somente 29 posições (ao invés de 30) retornadas pelo ACBrMonitorPlus.

Não estou conseguindo descobrir como resolver isso (até porque não tenho grandes conhecimentos em Lazarus), porém acredito que isso esteja ocorrendo pois a String é UTF-8, onde no caso a caracter ã é representado em 2 bytes em UTF-8, diferentemente que no ANSI aonde é 1 byte.

Já tentei trocar aquele parâmetro no ACBrMonitor para usar comunicação ANSI mas o problema continua.

Fiz a depuração do ACBrMonitorPlus, e o problema aparece no ACBrUtils.pas na função abaixo:

function PadLeft(const AString : String; const nLen : Integer;
   const Caracter : Char) : String ;
var
  Tam: Integer;
begin
  Tam := Length(AString);        <<< ESTE LENGTH('Cartão') retorna 7 ao invés de 6!!!!
  if Tam < nLen then
    Result := StringOfChar(Caracter, (nLen - Tam)) + AString
  else
    Result := LeftStr(AString, nLen) ;  //RightStr(AString,nLen) ;
end ;  

Alguém pode me ajudar a resolver isso?

 

Obrigado!

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2779 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...