我目前的知识:
如果您尝试在vbscript / asp中编写文本文件,则有两个选择。
- Scripting.FileSystemObject
- ADODB.Stream对象
Scripting.FileSystemObject
不支持utf8。它将以Ascii或Unicode格式编写(并且大多数字符浪费了两个字节)
ADODB.Stream
不支持附加(afaik)。我无法弄清楚如何使ADODB.Stream
对象实际上打开文件并在调用stream.Write时将其写入。有一个SaveToFile
功能,但它输出整个流。
如果您需要写入1GB的文件,则必须将整个1GB的数据填充到流中,然后才能将其写出。
是否有特殊技巧将ADODB.Stream
对象获取到[[link到磁盘上的文件?我试过了:
stream.Open "URL=file:///c:\test.txt"
但是那给出了一个错误。
如果您真的想呆在[[in] 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打开文件。然后通过此函数传递要写入的字符串的每个字符。
NOTE该函数需要一个Unicode代码点,因此请确保使用
AscW()
而不是普通的Asc()
:
For i = 1 to Len(s) file.Write Utf8(AscW(Mid(s, i, 1))) Next