2008-12-18 82 views
2

我的当前知识:在vbscript/classicasp中添加UTF-8文件 - 是否可以完成?

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

  1. 的Scripting.FileSystemObject的
  2. ADODB.Stream对象

Scripting.FileSystemObject的不支持UTF8。它将使用Ascii或Unicode编码(并为大部分字符浪费两个字节)

ADODB.Stream不支持附加(afaik)。我无法弄清楚如何在调用stream.Write时使ADODB.Stream对象实际打开文件并写入它。有一个SaveToFile函数,但它输出整个流。

如果您需要编写1GB文件,则必须先将整个1GB填充到流中,然后才能写出。

是否有一个特殊的技巧,让ADODB.Stream对象链接到磁盘上的文件?我试过 stream.Open“URL = file:/// c:\ test.txt” 但是这给了一个错误。

回答

7

在这种情况下,我可能会创建一个采用字符串的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 
相关问题