function putTextContent(path, data, chrs) {
chrs = (chrs || "utf-8").toLowerCase();
var com = new ActiveXObject("ADODB.Stream"), utf8 = "utf-8" === chrs;
com.Type = 2,
com.Mode = 3,
com.Charset = utf8 ? "iso-8859-1" : chrs,
com.Open(),
com.WriteText(utf8 ? unescape(encodeURIComponent(data)) : data),
com.SaveToFile(path, 2),
com.Flush(),
com.Close();
}
Option Explicit
Function IIf(ByVal e, ByVal t, ByVal f)
If e Then
IIf = t
Else
IIf = f
End If
End Function
Function putTextContent(ByVal path, ByVal data, ByVal chrs)
Dim com, utf8
utf8 = CBool("utf-8" = LCase(chrs))
Set com = CreateObject("ADODB.Stream")
com.Type = 2
com.Mode = 3
com.Charset = IIf(utf8, "iso-8859-1", chrs)
com.Open
com.WriteText Unescape(encodeURIComponent(data))
com.SaveToFile path, 2
com.Close
Set com = Nothing
End Function
Function RShift(ByVal num, ByVal bits)
RShift = num \ (2 ^ bits)
End Function
Function encodeURIComponent(ByVal str)
Dim reg, arr, i, x, cc
Set reg = New RegExp
reg.Global = True
arr = Split(reg.Replace(str, Chr(0)), Chr(0))
ReDim tmp(UBound(arr) * 3)
x = 0
For i = 1 To UBound(arr) - 1
cc = AscW(arr(i)) And &HFFFF&
If cc <= &H7F Then
tmp(x) = Escape(arr(i))
ElseIf cc >= &H80 And cc <= &H07FF& Then
tmp(x) = "%" & Hex((RShift(cc, 6) And &H1F) Or &HC0)
x = x + 1
tmp(x) = "%" & Hex((cc And &H3F) Or &H80)
ElseIf cc >= &H0800& And cc <= &HFFFF& Then
tmp(x) = "%" & Hex((RShift(cc, 12) And &H0F) Or &HE0)
x = x + 1
tmp(x) = "%" & Hex((RShift(cc, 6) And &H3F) Or &H80)
x = x + 1
tmp(x) = "%" & Hex((cc And &H3F) Or &H80)
End If
x = x + 1
Next
encodeURIComponent = Join(tmp, "")
End Function
如果用在asp中,那么encodeURIComponent可以直接用<script runat="server" language="javascript">的方法从js中借用过来,vbs中很多地方都不方便,像split空字符的问题,js中只要string.split("")就能返回正确的字符数组,而vbs则在数组前后各增加了一个空字符