Asp classic UTF-8文件在vbscript/ClassCasp中追加-可以这样做吗?
我目前的知识: 如果您试图在vbscript/asp语言中编写文本文件,则有两个选项Asp classic UTF-8文件在vbscript/ClassCasp中追加-可以这样做吗?,asp-classic,vbscript,Asp Classic,Vbscript,我目前的知识: 如果您试图在vbscript/asp语言中编写文本文件,则有两个选项 Scripting.FileSystemObject ADODB.Stream对象 脚本编写。FileSystemObject不支持utf8。它将使用Ascii或Unicode进行写入(对于大多数字符,会浪费两个字节) ADODB.Stream不支持追加(afaik)。我不知道如何使ADODB.Stream对象在调用Stream.write时实际打开一个文件并写入它。有一个SaveToFile函数,但它输出整个
脚本编写。FileSystemObject
不支持utf8。它将使用Ascii或Unicode进行写入(对于大多数字符,会浪费两个字节)
ADODB.Stream
不支持追加(afaik)。我不知道如何使ADODB.Stream
对象在调用Stream.write时实际打开一个文件并写入它。有一个SaveToFile
函数,但它输出整个流
如果需要写入1GB文件,则必须先将整个1GB填充到流中,然后才能将其写入
是否有一种特殊的技巧可以让ADODB.Stream
对象链接到磁盘上的文件?我试过:
stream.Open "URL=file:///c:\test.txt"
但是这会产生一个错误。在这个场景中,我可能会创建一个COM组件,该组件接受一个字符串,并运行它以将其转换为UTF-8 如果你真的想留在VBScript中,我刚刚完成了一个非常快速和肮脏的UTF-8转换
Function Utf8(ByVal c)
Dim b1, b2, b3
If c < 128 Then
Utf8 = chr(c)
ElseIf c < 2048 Then
b1 = c Mod 64
b2 = (c - b1) / 64
Utf8 = chr(&hc0 + b2) & chr(&h80 + b1)
ElseIf c < 65536 Then
b1 = c Mod 64
b2 = ((c - b1) / 64) Mod 64
b3 = (c - b1 - (64 * b2)) / 4096
Utf8 = chr(&he0 + b3) & chr(&h80 + b2) & chr(&h80 + b1)
End If
End Function
For i = 1 to Len(s)
file.Write Utf8(AscW(Mid(s, i, 1)))
Next