Arquivos do SPED devem ser gerados com codificação ISO 8859-1

No Manual de Orientação do Leiaute da Escrituração Contábil Digital - LECD, está especificado:

"Arquivo no formato texto, codificado em ASCII - ISO 8859-1 (Latin-1), não sendo aceitos campos compactados (packed decimal), zonados, binários, ponto flutuante (float point), etc., ou quaisquer outras codificações de texto, tais como EBCDIC;"

Nosso sistema, desenvolvido em C#, estava gerando os arquivos do SPED com o método CreateText da classe System.IO.File.

StreamWriter sw = System.IO.File.CreateText(path);
sw.Write(livroEletronico.ToString());
sw.Close();

O problema é que, por padrão, este método gera arquivos texto com codificação UTF-8. Isto resultava em acentuação e outros caracteres especiais incorretos no programa validador do SPED Contábil. Veja exemplo abaixo:

Detalhe relatório do SPED em UTF-8

Para corrigir esta situação, bastou gerar o arquivo com o método WriteAllText. Este método cria e abre o arquivo, escreve todo o conteúdo da string passada e fecha o arquivo na sequencia. Se o arquivo já existir, será sobrescrito. Este é o método ideal porque podemos especificar facilmente a codificação ISO-8859-1:

System.IO.File.WriteAllText(path, livroEletronico.ToString(), Encoding.GetEncoding("ISO-8859-1"));

Veja o novo resultado:

Detalhe relatório do SPED ISO 8859-1

Obs.: nos exemplos, "livroEletronico" é uma instância da classe StringBuilder do namespace System.Text. Ela é utilizada como buffer do conteúdo completo antes da geração do arquivo em si.

blog comments powered by Disqus