当前位置:  开发笔记 > 后端 > 正文

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

如何解决《附加在vbscript/classicasp中的UTF-8文件-可以这样做吗?》经验,为你挑选了1个好方法。

我目前的知识:

如果您尝试在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"但是这给了一个错误.



1> Arnout..:

在这种情况下,我可能会创建一个带有字符串的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

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有