MÉTODO FILE.READALLLINES (ENCONDING)

W8.LISBOA 28/06/2016 23:04:00
#464244
Vamos lá,

Estou lendo um arquivo txt conforme método abaixo, acontece que se possuir acentuação em algum caractere, este é mostrado deformado, conforme já conhecemos.

Código:


  Private Sub analisadados()
Try
[ô] ler todas as colunas do grid uma uma
For i As Integer = 0 To DataGridView1.Rows.Count - 1

[ô] Passar por todas as linhas do ficheiro
For Each linha As String In File.ReadAllLines(caminho, Encoding.UTF8)

[ô] Caso o conteúdo da linha contenha a celula 1
If linha.Contains(DataGridView1.Rows.Item(i).Cells(1).Value) Then

[ô] Procura a posição do caractere separador (espaço)
Dim posSeparador = linha.IndexOf([Ô] [Ô])

[ô] Lê o conteúdo antes do caractere separador com o nome do ficheiro
Dim nomeFicheiro As String = linha.Substring(0, posSeparador)

[ô] Lê o conteúdo depois do caractere separador como hash do ficheiro
Dim hashFicheiro As String = linha.Substring(posSeparador)

ListBox1.Items.Add(nomeFicheiro & hashFicheiro)
End If
Next
Next i
Catch ex As Exception
MessageBox.Show([Ô]Erro [Ô] & ex.Message.ToString)
End Try
End Sub


Como resolver essa situação, visto que já uso UFT-8 ?
KERPLUNK 28/06/2016 23:48:06
#464253
Codificação não é necessariamente relacionada à acentuação, mas sim o que foi usado para criar o arquivo. Existe um jeito de verificar a codificação correta do arquivo, ou você pode tentar todas as possíveis... O método abaixo, faz exatamente isso:

public static Encoding GetEncoding(string filename)
{
var bom = new byte[4];
using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
file.Read(bom, 0, 4);
}

if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return Encoding.UTF7;
if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return Encoding.UTF8;
if (bom[0] == 0xff && bom[1] == 0xfe) return Encoding.Unicode; //UTF-16LE
if (bom[0] == 0xfe && bom[1] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE
if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return Encoding.UTF32;
return Encoding.ASCII;
}


Você passa simplesmente o caminho do arquivo e o método retorna a codificação dele.
JABA 29/06/2016 01:02:38
#464258
Resposta escolhida
Tente com :

For Each linha As String In File.ReadAllLines(caminho, Encoding.GetEncoding(28591)) 
W8.LISBOA 30/06/2016 19:31:55
#464351
Obrigado KERPLUNK, agradeço pelo conhecimento transmitido, será de grande valor.

Vou pontuar o JABA por ter apresentado a solução para o momento, grande abraço!!
Tópico encerrado , respostas não são mais permitidas