Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Estou tentando realizar o download de uma NF-e da Sefaz, tudo funciona perfeitamente até executar a função ACBrUtil.ParseText, mais precisamente na chamada a função Utf8Decode que retorna vazio.

A função Utf8Decode faz chamada a função Utf8ToUnicode que devolve -1. Ou seja, ocorreu algum erro na conversão. Debugando... consegui encontrar que o problema ocorre quando a função Utf8ToUnicode passa pelo caractere BELL. Já tentei criar uma outra função para remover o BELL antes de chamar a função Utf8Decode, mas não deu certo.

Como “alternativa” fui na função ACBrUtil.ParseText e realizei algumas mudanças conforme abaixo, está resolvendo por enquanto, mas creio que não é uma boa opção, rs.

Segue em anexo o XML da NF-e que consegui após realizar a modificação na função ACBrUtil.ParseText.

Estou usando Delphi 2007. 

Agradeço a quem puder ajudar.

function ParseText( Texto : AnsiString; Decode : Boolean = True;
   IsUTF8: Boolean = True ) : AnsiString;
var
  {Adicionado para resolver o problema de conversão}
  TextoTemp: AnsiString;
begin
  if Decode then begin
    Texto := AnsiString(StringReplace(String(Texto), '&', '&', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&lt;', '<', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&gt;', '>', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&quot;', '"', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&#39;', #39, [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&aacute;', 'á', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Aacute;', 'Á', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&acirc;' , 'â', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Acirc;' , 'Â', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&atilde;', 'ã', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Atilde;', 'Ã', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&agrave;', 'à', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Agrave;', 'À', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&eacute;', 'é', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Eacute;', 'É', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&ecirc;' , 'ê', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Ecirc;' , 'Ê', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&iacute;', 'í', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Iacute;', 'Í', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&oacute;', 'ó', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Oacute;', 'Ó', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&otilde;', 'õ', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Otilde;', 'Õ', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&ocirc;' , 'ô', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Ocirc;' , 'Ô', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&uacute;', 'ú', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Uacute;', 'Ú', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&uuml;'  , 'ü', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Uuml;'  , 'Ü', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&ccedil;', 'ç', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&Ccedil;', 'Ç', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '&apos;', '''', [rfReplaceAll]));
    
    {Adicionado para resolver o problema de conversão}
    TextoTemp := Texto;
    
    if IsUTF8 then
    begin
      {$IFDEF DELPHI12_UP}  // delphi 2009 em diante
       Texto := AnsiString(UTF8ToString(Texto));
      {$ELSE}
       Texto := Utf8ToAnsi(Texto);
      {$ENDIF}
    end;
  end
  else begin
    Texto := AnsiString(StringReplace(String(Texto), '&', '&amp;', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '<', '&lt;', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '>', '&gt;', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), '"', '&quot;', [rfReplaceAll]));
    Texto := AnsiString(StringReplace(String(Texto), #39, '&#39;', [rfReplaceAll]));
    if IsUTF8 then
    begin
      {$IFDEF DELPHI12_UP}  // delphi 2009 em diante
       Texto := AnsiString(UTF8ToString(Texto));
      {$ELSE}
       Texto := AnsiString(UTF8Decode(Texto));
      {$ENDIF}
    end ;
  end;

  {Adicionado para resolver o problema de conversão}
  if Texto = '' then begin
    Result := TextoTemp;
  end
  else begin
    Result := Texto;
  end;
end;

32150627124023000164550000000151741000043990-nfe.xml

  • 3 semanas depois ...
  • Este tópico foi criado há 3530 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 8 segundos...