Asp classic UTF-8文件在vbscript/ClassCasp中追加-可以这样做吗?

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函数,但它输出整个

我目前的知识:

如果您试图在vbscript/asp语言中编写文本文件,则有两个选项

  • Scripting.FileSystemObject
  • ADODB.Stream对象
  • 脚本编写。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