Conforme especificado no Manual de Integração da SEFAZ o XML de um documento fical deve estar obrigatoriamente com Encode UTF-8.
Ao carregar o conteúdo destes arquivos de forma convencional em VB6, o mesmo muda a codificação para ANSI, o que gera um transtorno imenso caso este XML possua caracteres especiais como acentos.
Para resolver esse problema, podemos utilizar a função abaixo que realiza a conversão para UTF-8, de forma que o arquivo seja carregado em memoria corretamente.
Private Function ReadUTF8File(sFile) As String
Const ForReading = 1
Dim sPrefix
With CreateObject("Scripting.FileSystemObject")
sPrefix = .OpenTextFile(sFile, ForReading, False, False).Read(3)
End With
If Left(sPrefix, 3) <> Chr(&HEF) & Chr(&HBB) & Chr(&HBF) Then
With CreateObject("Scripting.FileSystemObject")
pvReadFile = .OpenTextFile(sFile, ForReading, False, Left(sPrefix, 2) = Chr(&HFF) & Chr(&HFE)).ReadAll()
ReadUTF8File = pvReadFile
End With
Else
With CreateObject("ADODB.Stream")
.Open
If Left(sPrefix, 2) = Chr(&HFF) & Chr(&HFE) Then
.Charset = "Unicode"
ElseIf Left(sPrefix, 3) = Chr(&HEF) & Chr(&HBB) & Chr(&HBF) Then
.Charset = "UTF-8"
Else
.Charset = "_autodetect"
End If
.LoadFromFile sFile
pvReadFile = .ReadText
ReadUTF8File = pvReadFile
End With
End If
End Function
Segue abaixo um exemplo de utilização simples, no clique de um botão.
Private Sub Command1_Click()
ReadUTF8File (App.Path + "\teste.xml")
End Sub
Com essa função vamos conseguir ler o arquivo XML dentro do formato estabelecido pela SEFAZ.
Em anexo ao post, segue um projeto contendo a função e exemplo de utilização.
Comentários
0 comentário
Por favor, entre para comentar.