我目前的知识:
如果您尝试在vbscript/asp land中编写文本文件,则有两种选择.
Scripting.FileSystemObject
ADODB.Stream对象
Scripting.FileSystemObject不支持utf8.它将用Ascii或Unicode编写(并为大多数字符浪费两个字节)
ADODB.Stream不支持追加(afaik).我无法弄清楚如何使ADODB.Stream对象实际打开一个文件,并在调用stream.Write时写入它.有一个SaveToFile函数,但它输出整个流.
如果您需要编写1GB文件,则必须先将整个1GB填入流中,然后才能将其写出来.
是否有一个特殊技巧可以让ADODB.Stream对象链接到磁盘上的文件?我试过stream.Open"URL = file:/// c:\ test.txt"但是这给了一个错误.
在这种情况下,我可能会创建一个带有字符串的COM组件,并通过WideCharToMultiByte运行它以将其转换为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
只需使用Scripting.FileSystemObject打开一个文件,使用系统默认编码.然后通过此函数传递要写入的字符串的每个字符.
请注意,该函数需要Unicode代码点,因此请务必使用AscW()
而不是plain Asc()
:
For i = 1 to Len(s) file.Write Utf8(AscW(Mid(s, i, 1))) Next