gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:39:16 27 4
gpt4 key购买 nike

我目前的知识:

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

  1. the Scripting.FileSystemObject
  2. the ADODB.Stream object

Scripting.FileSystemObject 不支持 utf8。它将以 Ascii 或 Unicode 编写(并且对于大多数字符来说会浪费两个字节)

ADODB.Stream 不支持附加 (afaik)。当我调用 stream.Write 时,我不知道如何让 ADODB.Stream 对象真正打开一个文件并写入它。有一个 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() 而不是普通的 Asc():

For i = 1 to Len(s)
file.Write Utf8(AscW(Mid(s, i, 1)))
Next

关于asp-classic - 在 vbscript/classicasp 中附加 UTF-8 文件 - 可以完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/378850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com