【问题标题】:visual basic writes gibberish at the start of text fileVisual Basic 在文本文件的开头写乱码
【发布时间】:2026-02-02 11:50:01
【问题描述】:

我在文本文件中写入数字,每行一个数字,如下所示:

N=3
My.Computer.FileSystem.WriteAllText(file_name, N & vbCrLf, True)

如果我用 Fortran 读取这一行而不是返回 3,它会返回 Ύ╗┐3。 如果我用 Python 阅读它,它会返回 ο»Ώ3 这只发生在文件的开头,其他地方都没有。我该如何摆脱它以及它为什么会存在?

【问题讨论】:

  • 这是 UTF-8 序言。当您使用 StreamWriter 时,默认编码是 UTF-8。使用相同的编码读取文件。或者指定编码,避免写BOM。由于 UTF-8 与 ASCII 编码兼容,因此当 BOM 未插入文件开头时,您将获得相同的结果。这当然适用于 (0-127) 范围内的代码点。之后,UTF-8 每个字符使用 2 个字节。但你可以简单地使用 Encoding.ASCII。

标签: vb.net file text append


【解决方案1】:

此方法使用不带字节顺序标记 (BOM) 的 UTF-8 编码。 Environment.NewLine 独立于平台。文件顶部需要Imports System.IO

Private Sub OPCode()
    Dim N = 3
    File.AppendAllText(file_name, N & Environment.NewLine)
End Sub

【讨论】:

  • 谢谢@Jimi 没有注意到他添加了几个数字
  • 确实有效,谢谢。原来它也可以使用 StreamWriter。另外,我在最初的问题中没有提到,但是关于 WriteAllText 的“危险”之处在于 .txt 如果用记事本 ++(甚至记事本)打开,它显示得非常好,只有当我像我提到的那样阅读它时它显示了前 3 个奇数字符。
  • @Monochromatic Notepad 知道 Unicode 的各种文件类型和字节顺序标记,因此它对您隐藏了它们。 (严格来说,UTF-8 所谓的字节序标记是用词不当,因为基本单位是单个字节,字节序没有变化。)
【解决方案2】:

考虑使用vbNewLine 而不是vbCrLf

Dim N As Integer = 3
My.Computer.Filesystem.WriteAllText(file_name, N & vbNewLine, True)

这应该可以解决您的问题。或者,由于文本编码问题,该问题很有可能发生。

【讨论】:

  • 我之前尝试过 vbNewLine 并且我再次尝试以防万一但没有帮助。但是编码呢?我没有使用奇怪的字符,只是写一个整数。
  • 尝试使用System.IO.Filesystem.WriteAllText(file_name, N & vbNewLine, System.Text.Encoding.ASCII)System.Text.Encoding.UTF8 写入文件,看看是否有效。
  • re:MS Docs 中的 vbNewLine 警告此 API 现在已过时。 docs.microsoft.com/en-us/dotnet/api/…
  • Environment.NewLine 怎么样?