asp用adodb.stream保存utf-8文件时去掉bom头

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则在数组前后各增加了一个空字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值