Microsoft.VisualBasic.FileIO.TextFieldParser изменяет ± Ascii 241 на? Ascii 63 - PullRequest
7 голосов
/ 11 декабря 2010

Я использую Microsoft.VisualBasic.Fileio.TextFieldParser для разбора файла CSV, созданного в Excel 2003. Парсер работает отлично, за исключением того, что он преобразовывает расширенные значения ascii в вопросительные знаки!Так что, если содержимое файла было:

± 3
TextFieldParser возвращает
?3

Я безуспешно перепробовал все кодировки в пакете System.Text.Encoding.Я думал, что у меня есть это с UTF7, но он пропускал другие символы, такие как замена знака + пробелом.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

17 голосов
/ 11 декабря 2010

Microsoft.VisualBasic.Fileio.TextFieldParser по умолчанию использует кодировку UTF8, но текстовый файл находится в текущей кодировке ANSI системы.Используйте один из конструкторов, которые принимают кодировку, например: TextFieldParser (путь строки, кодировка defaultEncoding) .

Вы можете передать System.Text.Encoding.Default дляваше кодирование или создание нового объекта кодирования, передаваемого в кодовой странице.По умолчанию в английской Windows 1252 .

0 голосов
/ 11 декабря 2010
    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...