Ir para conteúdo
  • Cadastre-se

Input is not proper UTF-8, indicate encoding ! Bytes: 0xE7 0xE3 0x6F 0x20


Recommended Posts

Postado

Notei que na unit PadraoNacional.Provider, procedure TratarRetornoConsultaNFSeporChave foi adicionado o seguinte:
 

	if NFSeXml <> '' then
    	NFSeXml := DecodeToString(DeCompress(DecodeBase64(NFSeXml)), true);

O DecodeToString está mudando o encode, saindo do UTF8, o que gera o erro indicado no tópico. Se mantido assim:
 

NFSeXml := DeCompress(DecodeBase64(NFSeXml));

O erro não ocorre mais. Visualmente na IDE o texto do XML fica "parecendo que está com erros de acentuação", mas tanto o XML salvo quanto o valor das propriedades ao carregar o XML ficam na formatação correta. 

A duvida seria o motivo do DecodeToString ter sido adicionado neste ponto.

Rodrigo

Analista / Desenvolvedor Delphi

Postado (editado)

@Rodrigo Crovador

Na minha humilde opinião, acredito que o xml puro deva ficar formatado conforme foi enviado para aprovação, com acentos e demais caracteres especiais, tanto pela questão da integridade das informações, quanto pela praticidade de poder abrir o arquivo em qualquer editor e visualizar o conteúdo completo.

Editado por Gabriel Bonzanini
Citação do colega
Postado
26 minutos atrás, Gabriel Bonzanini disse:

@Rodrigo Crovador

Na minha humilde opinião, acredito que o xml puro deva ficar formatado conforme foi enviado para aprovação, com acentos e demais caracteres especiais, tanto pela questão da integridade das informações, quanto pela praticidade de poder abrir o arquivo em qualquer editor e visualizar o conteúdo completo.

Depende um pouco do que se refere como XML puro. Se for o retorno do ambiente nacional, ele é puramente em UTF8. Se a IDE não tiver suporte a UTF8 no debug, ela fará a conversão para o formado suportado para exibir, mas somente no debug da IDE.

Os arquivos gerados pelo componente ficam com a acentuação correta pois é feito o tratamento antes de salvar o XML ou carregar os valores.

Rodrigo

Analista / Desenvolvedor Delphi

  • Membros Pro
Postado (editado)
18 horas atrás, Daniel Simoes disse:

@Italo Giurizzato Junior e @Diego Foliene,

Preciso de instruções, de como podemos reproduzir esse problema, nos Demos do ACBr...

essa  modificação, pode quebrar o suporte a FPC e Delphi POSIX, que usam UTF8 de forma nativa...

O problema parece estar nas classes de NFSe, pois os documentos de NFe, NFCe, usam esses mesmos fontes, sem problemas com acentos em UTF8

Se precisar verificar como reproduzir, no meu caso aqui, é consulta de um NFSe pela chave no Nacional.

Editado por marcosvillatore
Postado (editado)

No meu caso aqui só passou do erro e sem os caracteres estranhos, alterando o `PadraoNacional.Provider.pas` adicionei o método

function TACBrNFSeProviderPadraoNacional.DecompressNFSeXML(const Base64Gzip: String): String;
var
  StringGzip: AnsiString;
  UTF8Result: UTF8String;
  Stream: TStringStream;
begin
  Result := '';

  if Base64Gzip = '' then
    Exit;

  try
    // Converte Base64 para string ANSI (dados binários)
    StringGzip := DecodeBase64(Base64Gzip);

    // Descomprime - assumindo que UnZip retorna UTF-8
    UTF8Result := UnZip(StringGzip);

    Stream := TStringStream.Create(UTF8Result);

    // Converte UTF-8 para WideString (Unicode) corretamente
    Result := UTF8Decode(Stream.DataString); //UTF8Decode(UTF8Result);

    FreeAndNil(Stream);
  except
    on E: Exception do
    begin
      Result := '';
    end;
  end;
end;

e no `ACBrXmlDocument` adicionei a linha 

 if loadedDoc = nil then
    loadedDoc :=  xmlParseDoc( PAnsiChar( ACBrAnsiToUTF8( AXmlDocument ) ) );

dessa forma ficou sem o erro do utf-8 e sem os caracteres estranhos na hora de imprimir

Editado por Patric Fonseca
Postado
1 hora atrás, Rodrigo Crovador disse:

Depende um pouco do que se refere como XML puro. Se for o retorno do ambiente nacional, ele é puramente em UTF8. Se a IDE não tiver suporte a UTF8 no debug, ela fará a conversão para o formado suportado para exibir, mas somente no debug da IDE.

Os arquivos gerados pelo componente ficam com a acentuação correta pois é feito o tratamento antes de salvar o XML ou carregar os valores.

A questão talvez seja que a variável NFSeXml é o binário do xml em ASCII, não UTF8.

  • Consultores
Postado

Boa tarde pessoal,

Para este caso já temos uma task de número 8962 a qual está em tratativa na sprint atual.

At.

  • Curtir 3
Consultora ACBr Pro

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

@Daniel Simoes,

Eu fiz as correções nos meus fontes do ACBr e estava consulta de NFSe por chave estava funcionando.

Atualizei ACBr para versão 44804, recompilei os pacotes excluindo arquivos velhos, e infelizmente o problema persiste.

 

  • Consultores
Postado
13 minutos atrás, Daniel Simoes disse:

Os fontes anexados acima, ainda não estão no SVN

Basicamente para testar o usuário deve atualizar os fontes do ACBr para a última revisão, após isto ele tem de copiar os arquivos para os respectivos caminhos (\\ACBr\Fontes\ACBrDFe\ACBrXmlDocument.pas e \\ACBrDFe\ACBrNFSeX\Provedores\PadraoNacional.Provider.pas) e recompilar o ACBr.
Correto?

Valter Patrick
Gerente de Projetos na empresa CTEC
Consultor ACBr
(33)98400-0936
GitHub: https://github.com/valterpatrick

Ajude o Projeto ACBr crescer - Assine o Clube PRO                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

  • Fundadores
Postado
6 minutos atrás, valterpatrick disse:

e recompilar o ACBr.
Correto?

sim...

Mas se ele instalou o ACBr, com a opção "Deixar somente a LibXX..."  então ele precisará rodar novamente o instalador...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Consultores
Postado
2 minutos atrás, Daniel Simoes disse:

sim...

Mas se ele instalou o ACBr, com a opção "Deixar somente a LibXX..."  então ele precisará rodar novamente o instalador...

A orientação é que desmarque a opção "Deixar somente a pasta LibXX no Library Path do Delphi" para esta situação especifico ou seria orientação para as demais vezes?

image.png

Valter Patrick
Gerente de Projetos na empresa CTEC
Consultor ACBr
(33)98400-0936
GitHub: https://github.com/valterpatrick

Ajude o Projeto ACBr crescer - Assine o Clube PRO                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

  • Fundadores
Postado
7 minutos atrás, valterpatrick disse:

A orientação é que desmarque a opção "Deixar somente a pasta LibXX no Library Path do Delphi" para esta situação especifico ou seria orientação para as demais vezes?

não precisa desmarcar...

Mas se instalou com essa opção desmarcada... então o Delphi conhece os "Paths" de todos os fontes do ACBr, e consegue recompila-los, sob demanda

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membro Pro Verificado
Postado

Boa tarde, apenas para registro. Estou tentando emitir para CARIACICA - ES e estou com o mesmo problema. Tentei com essas units que o Daniel enviou e segue com erro.

Postado
3 minutos atrás, xandebugmann disse:

Boa tarde, apenas para registro. Estou tentando emitir para CARIACICA - ES e estou com o mesmo problema. Tentei com essas units que o Daniel enviou e segue com erro.

Mesmo problema aqui para Cariacica e Vila Velha.

Postado
Em 10/02/2026 at 14:37, Gabriel Bonzanini disse:

Boa tarde pessoal.

 

Resolvi o problema alterando o método TACBrNFSeProviderPadraoNacional.TratarRetornoConsultaNFSeporChave, da unit PadraoNacional.Provider.pas; precisei adicionar a função ACBrAnsiToUTF8 , da seguinte forma:

        { acrescenta a função DecodeToString visando o tratamento correto de
          vogais acentuadas e cedilha.
        }
        if NFSeXml <> '' then
          NFSeXml := ACBrAnsiToUTF8(DecodeToString(DeCompress(DecodeBase64(NFSeXml)), True));

Deixo em anexo a unit, para que possam analisar se isto afetará outros provedores.

PadraoNacional.Provider.pas 52.57 kB · 14 downloads

Alterei aqui e funcionou, obrigado Gabriel!

  • Curtir 1
  • Consultores
Postado
Em 16/02/2026 at 09:49, Faberson A. Ferrasi disse:

Essas units serão disponibilizadas em produção no SVN, ainda estão ajustando?

@Patrick Knopf, @xandebugmann, @Gênesis Interno, @Rogerio Morato Scarazatti, @Diogo Loff e outros interessados...

As units só serão disponibilizadas no SVN depois que os testes e validações forem feitas.

No momento precisamos que testem com as units providas pelo Daniel aqui (conforme abaixo) e reportem se funciona. Lembrando que após substituir essas units é necessário fazer uma nova instalação. Se puderem ajudar nos testes agradecemos:

Em 13/02/2026 at 12:37, Daniel Simoes disse:

Estamos testando uma possível, solução...

Caso queiram testar.. seguem as Units modificadas... 

ACBrXmlDocument.pas 37.04 kB · 25 downloads

PadraoNacional.Provider.pas 52.5 kB · 19 downloads

 

Para quem está tentando propor possíveis soluções, elas precisam ser validadas em versões diferentes do Delphi (7 - 13) e Lazarus, além de funcionar no Windows e Linux.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Membro Pro Verificado
Postado (editado)
17 horas atrás, Rogerio Morato Scarazatti disse:

Alterei aqui e funcionou, obrigado Gabriel!

Fiz o mesmo e funcionou pra mim também.

Editado por Patrick Knopf
  • Curtir 1
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.