vbs中将GB2312转Unicode的代码
程序员文章站
2022-08-27 15:25:37
今天写了一个类似于下面的程序: 复制代码 代码如下: dim http set http = createobject("msxml2.xmlhttp") http.ope...
今天写了一个类似于下面的程序:
dim http
set http = createobject("msxml2.xmlhttp")
http.open "get","http://www.sina.com.cn/",false
http.send
wscript.echo http.responsetext
但是却发现返回的中文都是乱码,看了一下发现新浪的编码竟然是gb2312的,汗,现在都是utf-8编码的时代了。responsetext对utf-8编码支持得很好,但是如果是gb2312编码就会返回乱码,有时甚至会报错。无奈,只好用responsebody然后自己转码。
dim http
set http = createobject("msxml2.xmlhttp")
http.open "get","http://www.sina.com.cn/",false
http.send
wscript.echo gb2312tounicode(http.responsebody)
于是就要自己写一个gb2312tounicode函数,用ado很容易实现:
function gb2312tounicode(str)
with createobject("adodb.stream")
.type = 1 : .open
.write str : .position = 0
.type = 2 : .charset = "gb2312"
gb2312tounicode = .readtext : .close
end with
end function
这样返回的就是vbs字符串默认的unicode编码了,不过用ado不能显示我鬼使神差的vbs水平,于是自己根据“算法”再写了一个:
function gb2312tounicode(str)
length = lenb(str) : out = ""
for i = 1 to length
c = ascb(midb(str,i,1))
if c <= 127 then
out = out & chr(c)
else
i = i + 1
d = hex(ascb(midb(str,i,1)))
c = "&h" & hex(c) & d
out = out & chr(c)
end if
next
gb2312tounicode = out
end function
只可惜效率太低,就当练练手吧。
原文:http://demon.tw/programming/vbs-gb2312-unicode.html
复制代码 代码如下:
dim http
set http = createobject("msxml2.xmlhttp")
http.open "get","http://www.sina.com.cn/",false
http.send
wscript.echo http.responsetext
但是却发现返回的中文都是乱码,看了一下发现新浪的编码竟然是gb2312的,汗,现在都是utf-8编码的时代了。responsetext对utf-8编码支持得很好,但是如果是gb2312编码就会返回乱码,有时甚至会报错。无奈,只好用responsebody然后自己转码。
复制代码 代码如下:
dim http
set http = createobject("msxml2.xmlhttp")
http.open "get","http://www.sina.com.cn/",false
http.send
wscript.echo gb2312tounicode(http.responsebody)
于是就要自己写一个gb2312tounicode函数,用ado很容易实现:
复制代码 代码如下:
function gb2312tounicode(str)
with createobject("adodb.stream")
.type = 1 : .open
.write str : .position = 0
.type = 2 : .charset = "gb2312"
gb2312tounicode = .readtext : .close
end with
end function
这样返回的就是vbs字符串默认的unicode编码了,不过用ado不能显示我鬼使神差的vbs水平,于是自己根据“算法”再写了一个:
复制代码 代码如下:
function gb2312tounicode(str)
length = lenb(str) : out = ""
for i = 1 to length
c = ascb(midb(str,i,1))
if c <= 127 then
out = out & chr(c)
else
i = i + 1
d = hex(ascb(midb(str,i,1)))
c = "&h" & hex(c) & d
out = out & chr(c)
end if
next
gb2312tounicode = out
end function
只可惜效率太低,就当练练手吧。
原文:http://demon.tw/programming/vbs-gb2312-unicode.html