Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Fundadores
Postado

Certifique-se de que seus fontes estão realmente atualizados...

Se o problema persistir, forneça um passo a passo, em detalhes, de como reproduzir o problema, usando o Demo do ACBrNFe

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.

Postado

Luciano,

Se você está gerando o arquivo a partir do conteúdo da propriedade XML do componente, terá que codificar ele em UTF8 antes de gravar, pois o ACBr não faz isso, tipo:

ACBrStrToUTF8(NFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.XML)

Na minha visão, já que todo XML retornado pelo governo usa UTF8, o correto seria o componente já retornar esse conteúdo formatado em UTF8. Indo mais além, acho que o XML retornado deveria ser exatamente aquele devolvido pelo governo, e não um que foi "montado/tratado" pelo componente.

Postado

Daniel, minha sugestão é que apenas o XML esteja em UTF8... as demais propriedades podem ficar com a string nativa mesmo.

Quem for exibir o XML no Delphi usará provavelmente um TMemo ou um TWebBrowser. O WebBroser vai mostrar perfeitamente (visto que o xml já tem a tag utf8), já o TMemo precisaria converter:

Memo1.Lines.text:=UTF8ToUnicodeString(aUTF8String);

Talvez ainda valha a pena armazenar o XML exatamente como foi devolvido pelo webservice do governo, em uma propriedade separada.

[]s
Cantu

  • Curtir 1
  • Fundadores
Postado

O WebService do governo não devolve o XML como você o recupera em (NFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.XML)....

Ele devolve um Envelope SOAP, com vários componentes dentro... pra chegar no XML que você extraiu com o comando acima, muito "parser" foi feito...

Observe ainda, dentro do XML do envelope SOAP de Resposta, achando a Tag de onde esse XML do evento é extraído, que não há a Tag de indicação de (UTF8)... ou seja, se simplesmente lhe entregarmos o que contem dentro da  Tag do evento, como UTF8, você continuará com o problema... pois não tem o cabeçalho de indicação do tipo do XML

Para isso existe o método

function ConverteXMLtoUTF8(const AXML: String): String;

em ACBrUtil... ele faz a conversão e inclui o cabeçalho (se necessário)... deixando o resultado final pronto para ser salvo e exibido em qq browser

 

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.

Postado

Caros,

Alterei o ACBrUtil.pas a funcao:

function ConverteXMLtoUTF8(const AXML: String): String;
var
  UTF8Str: AnsiString;
begin
  UTF8Str := ACBrStrToUTF8(AXML);
  if not XmlEhUTF8(AXML) then   // Já foi convertido antes ou montado em UTF8 ?
  begin
    Result := '<?xml version="1.0" encoding="UTF-8"?>' + String(UTF8Str);
  end
  else
    Result := UTF8Str;
end;

Desta forma FUNCIONA!

Que antes era assim:

function ConverteXMLtoUTF8(const AXML: String): String;
var
  UTF8Str: AnsiString;
begin
  if not XmlEhUTF8(AXML) then   // Já foi convertido antes ou montado em UTF8 ?
  begin
    UTF8Str := ACBrStrToUTF8(AXML);
    Result := '<?xml version="1.0" encoding="UTF-8"?>' + String(UTF8Str);
  end
  else
    Result := AXML;
end;

Por favor analisem...

Att,

Postado

Eu retirei UTF8Str := ACBrStrToUTF8(AXML) do  if not XmlEhUTF8(AXML) then.

Durante o Debug ele nunca entrava neste if, ou seja, do jeito que o xml vinha, retornava.

Att,

  • Fundadores
Postado

Não é o correto, pois se rodar a conversão em um código que já é UTF8, você terá problemas... Por isso o IF...

Se não entra no IF, é porque o XML já possui o cabeçalho de UTF8...

O que você está tentando converter com essa função ? Por favor poste um fragmento de código..

Se você quer simplesmente converter para UTF8, pode chamar a ACBrStrToUTF8, diretamente... Observe porém, que esse método apenas fará a conversão, e não adicionará o cabeçalho de UTF8... ( o que não é um problema se o que você quer converter, já possui o cabeçalho )

Para que o XML seja exibido corretamente no Browser ele precisa estar em UTF8, e possuir o cabeçalho indicando o Encoding 

 

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.

Postado

Meu problema e de outros colegas é apenas fazer com que o browser e o componente leia o xml com acentos, fiz o teste com a funcao fora do if e funcionou.

Ao utilizar o metodo GravarXml sempre vai passar ConverteXMLtoUTF8(const AXML: String): String, se nunca vai converter, por que usar a funcao? 
Que tipo de problema eu terei se fizer da forma como demonstrei?

Eu terei problemas utilizando ACBrStrToUTF8(vou testar se funciona) ? 

  • Fundadores
Postado

Por favor leia melhor os fontes... Suas afirmações não são corretas.. e suas modificações podem causar muitos efeitos colaterais...

Você deve compreender o que os métodos fazem, antes de modificá-los...

No tópico anterior, já descrevi o que faz a ConverteXMLtoUTF8 e a ACBrStrToUTF8

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.

  • Este tópico foi criado há 3355 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.