2008-12-18 33 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 
相關問題