Microsoft.VisualBasic.FileIO.TextFieldParser将±Ascii 241更改为? Ascii 63

时间:2010-12-11 00:52:03

标签: .net vb.net ascii

我正在使用Microsoft.VisualBasic.Fileio.TextFieldParser来解析使用Excel 2003创建的CSV文件。解析器工作得很好,除了它将扩展的ascii值转换为问号!因此,如果文件内容是:

  

±3
  TextFieldParser正在返回
  ? 3

我已经尝试过System.Text.Encoding包中的所有编码而没有运气。我以为我使用了UTF7,但它正在删除其他字符,例如用空格替换+符号。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:17)

Microsoft.VisualBasic.Fileio.TextFieldParser默认为UTF8编码,但文本文件采用系统当前的ANSI编码。使用其中一个采用编码的构造函数:TextFieldParser(string path, Encoding defaultEncoding)

您可以传入System.Text.Encoding.Default进行编码,或者在代码页中构建新的编码对象。英语Windows上的默认值为1252

答案 1 :(得分: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