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

VBScript读取文件返回异常结果求助:出现奇怪符号、空字符串且行数不符

排查VBScript文件读取异常的解决方案

我来帮你搞定这个文件读取的问题!从你描述的奇怪乱码符号、空字符串还有消息框数量和实际行数不符的情况来看,90%是踩了文件编码不匹配的坑——毕竟你改了扩展名也没用,说明问题根本不在后缀上。

问题根源分析

VBScript的FileSystemObject.OpenTextFile默认用系统的ANSI编码读取文件,但你的.job(改.txt后)文件大概率是Unicode(UTF-16)或者带BOM的UTF-8格式:

  • 那些奇怪的符号(带抑扬符的y、p/b组合、L)其实是编码不匹配产生的乱码,比如UTF-16的字节顺序标记(BOM)被当成ANSI字符解析了;
  • 空字符串和行数不符是因为编码错误时,ReadLine会错误识别换行符,或者把多字节字符当成文件结束标记,导致提前终止读取,或者读出空内容。

另外你代码里重复创建了FSO和objFSO两个FileSystemObject实例,虽然不会直接报错,但容易造成变量混乱,建议统一用一个。

针对性解决方案

先确认文件编码:用记事本打开你的文件,点击「文件」→「另存为」,看右下角的编码选项,然后对应下面的方法处理:

情况1:文件是Unicode(UTF-16)格式

直接给OpenTextFile加第4个参数指定Unicode格式读取:

Const ForReading = 1
Const UnicodeFormat = -1

' 统一一个FileSystemObject实例
Set fso = CreateObject("Scripting.FileSystemObject")
Dim objTextFile, strText, jFile

MsgBox "Open: " & vbCR & fso.GetAbsolutePathName(jFile)
' 第4个参数指定Unicode格式
Set objTextFile = fso.OpenTextFile(fso.GetAbsolutePathName(jFile), ForReading, False, UnicodeFormat)

Do Until objTextFile.AtEndOfStream
    strText = objTextFile.ReadLine
    MsgBox strText
Loop
objTextFile.Close

情况2:文件是UTF-8(带BOM)格式

VBScript原生OpenTextFile不支持UTF-8,需要用ADODB.Stream来读取:

Dim objStream, strText, splitText, strLine, jFile

Set objStream = CreateObject("ADODB.Stream")
objStream.Charset = "UTF-8"
objStream.Open
objStream.LoadFromFile jFile ' 直接传入你的文件路径
strText = objStream.ReadText()
objStream.Close

' 按换行拆分后逐行显示
splitText = Split(strText, vbCrLf)
For Each strLine in splitText
    MsgBox strLine
Next

额外注意点

  • 确保文件路径正确,且当前脚本有读取该文件的权限;
  • 如果你不确定编码,可以两种方法都试一下,哪个能正常读取就是对应格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:37:47