最近在用VB制作关于豆瓣的本地应用,有这样几个难点。
其一是豆瓣的API必须以UTF-8格式发送,而VB的编码都是ASCII的。
其二是如何发送和接受数据。
'这是用来将字符串转变为UTF-8格式
Public Function StringAsUtf8Bytes(ByVal strData As String) As String
Dim bytes() As Byte
bytes = System.Text.Encoding.UTF8.GetBytes(strData)
'这是用来将字符串转变为UTF-8格式,现在是字节数组形式。
Dim i%
For i = 0 To UBound(bytes)
StringAsUtf8Bytes &= "%" & Hex(bytes(i))
Next
'通过循环来把字节数组先转换为16进制,再在前方加上%就是API能接受的格式了。UTF-8把一个汉字转换为三个字节[?].即%AA%BB%CC的格式。
End Function
Sub FromDouban(ByVal moviename)
Dim objXMLHTTP, URL, html
objXMLHTTP = CreateObject("Microsoft.XMLHTTP")
Dim mn = StringAsUtf8Bytes(moviename)
URL = "http://api.douban.com/movie/subjects?q=" & mn & "&max-results=1"
'子过程接受外部输入的检索字符串,转变为API能接受的UTF-8格式后插入URL字符串变量。URL的其他部分是豆瓣提供的API接口。
Try
objXMLHTTP.Open("GET", URL, False) '用GET 命令发送和接受数据。
objXMLHTTP.Send()
html = objXMLHTTP.responseText
Dim s = srchwds(html, "<opensearch:totalResults>", "</opensearch:totalResults>")
If s = "0" Then
MessageBox.Show("糟糕~没找到影片。尝试着使用一下它的英文名字吧~", "出错啦~")
Else
'输出为xml文件。XML文件可用数据岛技术在HTML中打开,或者直接用VB通过设计检索特定的字符串来读取。
'这里推荐用下述的数据流的写入方式,直接用FileOpen会导致UTF-8编码的文字写入一个不是以UTF-8编码的文件。
Dim ADO_Stream As Object
ADO_Stream = CreateObject("ADODB.Stream")
With ADO_Stream
.Type = 2
.Mode = 3
.Charset = "utf-8"
.Open()
.WriteText(html)
.SaveToFile("default.xml", 2)
End With
ADO_Stream = Nothing
End If
Catch ex As Exception
MessageBox.Show(ex.ToString, "Error From Sub FromDouban")
End Try
End Sub