You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中用FileIO.TextFieldParser读取ANSI文件时字符异常的排查与解决

问题:ANSI编码文件在VB.NET TextFieldParser中读取€字符异常

我用Notepad++打开某文件显示正常,编码标识为ANSI,但用VB.NET的FileIO.TextFieldParser读取时,所有内置Encoding常量都无法得到正确文本。其中用Latin1编码读取的结果最接近,但本该显示的€字符变成了ChrW(128)(VS中显示该值,无法正常渲染)。调用代码如下:

Using tfp As New Microsoft.VisualBasic.FileIO.TextFieldParser(uPath, enc)
    s = tfp.ReadToEnd
End Using

原因分析

  1. Notepad++里的「ANSI」并非严格意义上的ANSI标准,而是Windows系统默认的代码页(通常是CP1252,即Windows-1252)。
  2. Latin1(ISO-8859-1)编码只覆盖了Unicode的U+0000到U+00FF范围,且其中0x80-0x9F是未定义的控制字符;而Windows-1252把这些字节映射成了实用字符,比如0x80对应€(Unicode U+20AC)。
  3. 当你用Latin1编码读取Windows-1252编码的文件时,字节0x80会被直接转成Unicode的U+0080(不可见控制字符),也就是ChrW(128),而非正确的€字符。

解决方法

直接指定使用Windows-1252编码读取文件,而非Latin1或其他内置编码。修改后的代码如下:

' 获取Windows-1252编码实例
Dim enc As Encoding = Encoding.GetEncoding(1252)
Using tfp As New Microsoft.VisualBasic.FileIO.TextFieldParser(uPath, enc)
    s = tfp.ReadToEnd
End Using

如果你的系统默认代码页不是CP1252(比如部分非西欧语言系统),可以先确认Notepad实际使用的代码页:在Notepad中打开文件后,查看「编码」菜单下的具体选项(比如「编码→字符集→西欧→Windows-1252」),然后用对应的代码页编号调用Encoding.GetEncoding即可。

内容的提问来源于stack exchange,提问作者tmighty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:50:26