Pesquisar na Comunidade
Showing results for tags 'acbrutil.parsetext'.
Encontrado 1 registro
-
utf8decode ParseText chama Utf8Decode que retorna vazio
um tópico no fórum postou FlávioDelesposte Dúvidas Gerais sobre o ACBr
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), '<', '<', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), '>', '>', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), '"', '"', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), ''', #39, [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'á', 'á', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Á', 'Á', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'â' , 'â', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Â' , 'Â', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'ã', 'ã', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Ã', 'Ã', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'à', 'à', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'À', 'À', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'é', 'é', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'É', 'É', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'ê' , 'ê', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Ê' , 'Ê', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'í', 'í', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Í', 'Í', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'ó', 'ó', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Ó', 'Ó', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'õ', 'õ', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Õ', 'Õ', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'ô' , 'ô', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Ô' , 'Ô', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'ú', 'ú', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Ú', 'Ú', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'ü' , 'ü', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Ü' , 'Ü', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'ç', 'ç', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), 'Ç', 'Ç', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), ''', '''', [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), '&', '&', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), '<', '<', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), '>', '>', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), '"', '"', [rfReplaceAll])); Texto := AnsiString(StringReplace(String(Texto), #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