如何在 VBScript 中读取 UTF-8 文本文件

问题描述 投票:0回答:2

我有一个保存为 UTF-8 的文本文件,当我尝试读取该文件时,它给出了奇怪的字符,而不是正确的字符(它包含中文字符)。我怎样才能让它给我正确的汉字?

Option Explicit

Dim objFSO, strTextFile, strData, strLine, arrLines, aniTextFile, aniData, aniLines, aniLine, objTextFile, fso, inputFileList, listFile, fname
Dim iim1, iret, iret2, iret3, i
Const ForReading   = 1

Set objFSO = CreateObject("Scripting.FileSystemObject")
strTextFile = "C:\Users\admin\Desktop\ArtistCG\folder.txt"
strData = objFSO.OpenTextFile(strTextFile,ForReading).ReadAll
arrLines = Split(strData,vbCrLf)

aniTextFile = "C:\Users\admin\Desktop\ArtistCG\folder-list.txt"
aniData = objFSO.OpenTextFile(aniTextFile,ForReading).ReadAll
aniLines = Split(aniData,vbCrLf)

For i = 0 To UBound(arrLines)
  strData = objFSO.OpenTextFile(arrLines(i),ForReading).ReadAll
  WScript.Echo strData

  Set listFile = objFSO.OpenTextFile(aniLines(i),ForReading)
  Do While Not listFile.AtEndOfStream
    fName = listFile.ReadLine
    WScript.Echo fName
  Loop
  listFile.Close
Next 
utf-8 character-encoding vbscript
2个回答
64
投票

来自文档

FSO 只能读取 ASCII 文本文件。您不能使用 FSO 来读取 Unicode 文件或读取二进制文件格式,例如 Microsoft Word 或 微软 Excel。

既然你有奇怪的字符,我想这有点不正确,并且该文件是在某些 8 位 Windows 代码页中读取的,因为如果它真的只能读取 ASCII,你会看到

????

无论如何,如果你可以使用ADO,你可以这样做:

Dim objStream, strData

Set objStream = CreateObject("ADODB.Stream")

objStream.CharSet = "utf-8"
objStream.Open
objStream.LoadFromFile("C:\Users\admin\Desktop\ArtistCG\folder.txt")

strData = objStream.ReadText()

objStream.Close
Set objStream = Nothing

-6
投票

您可以使用 , True 与文件系统对象一起读取 UTF 8 格式的文件。

sFile = "C:\Users\admin\Desktop\ArtistCG\folder.txt"
Set FS = CreateObject("scripting.filesystemobject")
Set oReadfile = FS.OpenTextFile(sFile, 1, False, True)
TextFromFile = sReadfile.ReadAll
© www.soinside.com 2019 - 2024. All rights reserved.