【问题标题】:Read utf-8 text file in vbscript在 vbscript 中读取 utf-8 文本文件
【发布时间】:2012-12-13 01:19:33
【问题描述】:

我有一个保存为 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


    【解决方案1】:

    From the documentation:

    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
    

    【讨论】:

    • 大声笑,FSO 确实无法读取 UTF-8,但 MSDN 文档让我对 Unicode 和二进制文件大笑。
    • 别忘了objStream.Close在objStream.ReadText()之后。
    • FSO 确实无法读取 UTF-8,但实际上您可以使用 FSO 和 read the content char by char in loop 将文件作为 ASCII 格式打开,然后将该字符序列转换为字符串 @ 987654324@。这只是学术兴趣; ADODB.Stream 绝对是最高效的。
    • “FSO 只能读取 ASCII 文本文件”是不正确的 - FileSystemObject 可以读取 UTF-16 文件,但不能读取 UTF-8,请参阅@Ekkehard.Horner 对 user2171987 答案的评论
    【解决方案2】:

    您可以使用文件系统对象时使用 , 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
    

    【讨论】:

    • -0.99 .OpenTextFile() 的 tristate 第四个/格式参数允许使用系统默认 (-2)、UTF-16 (-1) 打开文本文件,或 'ASCII' (0) 编码,但不是 UTF-8。
    • 这条评论帮助我最终弄清楚了如何读取我一直在尝试修改的 UTF-16 LE ini 文件。我可以在写入时将文件保存为 UTF-16 LE,但需要添加第四个参数为-1(TristateTrue),用于读取函数正确查找要修改的设置。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多