经典 ASP、VBScript 上下文。
很多文章,包括this Microsoft one ,假设您无法使用 FileSystemObject 读取 Unicode 文件。
我不久前遇到了这个问题,因此根据 ReadText 示例改用 ADODB.Stream here ,而不是使用 FileSystemObject.OpenTextFile (它确实接受一个最终参数,指示是否以 unicode 打开文件,但实际上不起作用)。
但是,当尝试读取 UNC 文件共享上的文件(与权限相关的问题)时,ADODB.Stream 会带来痛苦。因此,在对此进行调查时,我偶然发现了以下方法,该方法适用于 a) unicode 文件,b) 跨 UNC 文件共享:
dim fso, file, stream
set fso = Server.CreateObject("Scripting.FileSystemObject")
set file = fso.GetFile("\\SomeServer\Somefile.txt")
set stream = file.OpenAsTextStream(ForReading,-1) '-1 = unicode
这是使用FSO读取unicode文件,没有任何明显的问题,所以我对所有引用资料感到困惑,包括MS,说你不能使用FSO读取unicode文件。
还有其他人使用这种方法来读取 unicode 文件吗?是否有我遗漏的任何隐藏问题,或者您真的可以使用 FSO 读取 unicode 文件吗?
最佳答案
我认为 MS 没有正式声明它支持 unicode,因为:
- 它不会使用文件开头的字节顺序标记来检测 unicode 文件,并且
- 它仅支持 Little-Endian UTF-16 unicode 文件(并且您需要删除字节顺序标记(如果存在))。
下面是我(几年来)成功使用的一些示例代码,用于使用 FSO 自动检测和读取 unicode 文件(假设它们是小端字节序并包含 BOM):
'Detect Unicode Files
Set Stream = FSO.OpenTextFile(ScriptFolderObject.Path & "\" & FileName, 1, False)
intAsc1Chr = Asc(Stream.Read(1))
intAsc2Chr = Asc(Stream.Read(1))
Stream.Close
If intAsc1Chr = 255 And intAsc2Chr = 254 Then
OpenAsUnicode = True
Else
OpenAsUnicode = False
End If
'Get script content
Set Stream = FSO.OpenTextFile(ScriptFolderObject.Path & "\" & FileName, 1, 0, OpenAsUnicode)
TextContent = Stream.ReadAll()
Stream.Close
关于scripting - FileSystemObject - 读取 Unicode 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1410334/