UTF-8文件附加在vbscript / classicasp中-可以吗?

问题描述 投票:2回答:1

我目前的知识:

如果您尝试在vbscript / asp中编写文本文件,则有两个选择。

  1. Scripting.FileSystemObject
  2. 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"
但是那给出了一个错误。
asp-classic vbscript
1个回答
7
投票
在这种情况下,我可能会创建一个接受字符串的COM组件,并通过WideCharToMultiByte运行它以将其转换为UTF-8。

如果您真的想呆在[[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

© www.soinside.com 2019 - 2024. All rights reserved.