2010-12-11 18 views
5

Sto usando Microsoft.VisualBasic.Fileio.TextFieldParser per analizzare un file CSV che è stato creato con Excel 2003. Il parser funziona perfettamente con l'eccezione che sta convertendo i valori ascii estesi in punti interrogativi! Quindi, se il contenuto del file è stato:Microsoft.VisualBasic.FileIO.TextFieldParser cambia ± Ascii 241 in? Ascii 63

± 3
Il TextFieldParser sta tornando
? 3

Ho provato tutte le codifiche nel pacchetto System.Text.Encoding senza fortuna. Pensavo di averlo con UTF7 ma stava abbandonando altri personaggi come sostituire il segno + con uno spazio.

Qualsiasi aiuto sarebbe molto apprezzato.

+1

Non esiste una cosa come "ASCII 241". Il significato dei byte 128-255 è definito da ** estensioni a ** ASCII, e ce ne sono molti. –

+2

Hai controllato come viene salvato il file? Aprilo nel Blocco note e seleziona Salva come, dovrebbe esserci un menu a discesa da cui puoi selezionare la codifica. Controlla cosa c'è, sospetto ANSI. Potresti provare a salvarlo come UTF-8 e poi eseguirlo nuovamente attraverso l'app. – Pieter

risposta

15

Microsoft.VisualBasic.Fileio.TextFieldParser ha come impostazione predefinita la codifica UTF8, ma il file di testo si trova nella codifica ANSI corrente del sistema. Utilizzare uno dei costruttori che accetta una codifica del tipo: TextFieldParser(string path, Encoding defaultEncoding).

È possibile passare in System.Text.Encoding.Default per la codifica o creare un nuovo oggetto di codifica che passa in una tabella codici. L'impostazione predefinita per Windows inglese è 1252.

0
Dim s As String = "± 3" 
    'this produces the ? 
    Dim b() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(s) 

    'try this 
    Dim anEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding(28591) 
    b = anEncoding.GetBytes(s) 

    s = anEncoding.GetChars(b) 'check to see if it round-trips