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

.net Microsoft.VisualBasic.FileIO.TextFieldParser将±Ascii 241更改为?Ascii 63,.net,vb.net,ascii,.net,Vb.net,Ascii,我正在使用Microsoft.VisualBasic.Fileio.TextFieldParser解析使用Excel 2003创建的CSV文件。解析器工作得很好,只是它将扩展的ascii值转换为问号!因此,如果文件内容是: ±3 TextFieldParser正在返回 ? 三, 我尝试了System.Text.Encoding包中的所有编码,但没有成功。我以为我有UTF7,但它删除了其他字符,比如用空格替换+号 任何帮助都将不胜感激 Microsoft.VisualBasic.Fileio.Te

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

±3 TextFieldParser正在返回 ? 三,

我尝试了System.Text.Encoding包中的所有编码,但没有成功。我以为我有UTF7,但它删除了其他字符,比如用空格替换+号


任何帮助都将不胜感激

Microsoft.VisualBasic.Fileio.TextFieldParser默认为UTF8编码,但文本文件采用系统当前的ANSI编码。使用采用以下编码的构造函数之一:


您可以传入编码,也可以构造传入代码页的新编码对象。英语窗口的默认设置是。

没有“ASCII 241”这样的东西。128-255字节的含义是由ASCII扩展名定义的,其中有很多扩展名。您检查过文件保存为什么吗?在记事本中打开它并选择另存为,应该有一个下拉列表,您可以从中选择编码。我怀疑是ANSI,看看那里有什么。您可能希望尝试将其保存为UTF-8,然后再次通过应用程序运行它。
    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