2010-12-11 13 views
5

Używam Microsoft.VisualBasic.Fileio.TextFieldParser do parsowania pliku CSV utworzonego w programie Excel 2003. Parser działa świetnie z tym wyjątkiem, że konwertuje rozszerzone wartości ASCII na znaki zapytania! Więc jeśli zawartość pliku brzmiała:Microsoft.VisualBasic.FileIO.TextFieldParser zmienia ± Ascii 241 na? Ascii 63

± 3
TextFieldParser wraca
? 3

Próbowałem wszystkich kodowań w pakiecie System.Text.Encoding bez powodzenia. Myślałem, że mam go z UTF7, ale to upuszczanie innych znaków, takich jak zastąpienie znaku + spacją.

Każda pomoc zostanie bardzo doceniona.

+1

Nie ma czegoś takiego jak "ASCII 241". Znaczenie bajtów 128-255 jest zdefiniowane przez ** rozszerzenia do ** ASCII, i istnieje wiele z nich. –

+2

Czy sprawdziłeś, co plik jest zapisany jako? Otwórz go w Notatniku i wybierz Zapisz jako, powinno być rozwijane, z którego można wybrać kodowanie. Sprawdź, co tam jest, podejrzewam ANSI. Możesz spróbować zapisać go jako UTF-8, a następnie ponownie uruchomić go w swojej aplikacji. – Pieter

Odpowiedz

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