.1 将二进制流恢复成正常字符串的 VB 程序
下面的一段 VB 程序以二进制方式打开一个文本文件,再将文本文件内容送入一个二进制数组。
‘<程序 1>
Dim X() As Byte, L As String
Open App.Path & "a.txt" For Binary Access Read As #1 ‘以二进制方式打开文本文件 aa.txt
L = LOF(1) ‘取文本文件字节数
ReDim X(L - 1) ‘重定义二进制数组
Get #1, , X ‘将文件内容读入二进制数组
Close #1 ‘关闭文件
下面的一段 VB 程序将二进制数组中的内容恢复成字符,并显示出来。
‘<程序 2>
Dim I As Integer, S As String
For I = 0 To L – 1
S = S & Chr(X(I)) ‘将二进制数组元素中的内容按 ASCII 码的对应关系恢复成字符
Next I
MsgBox S ‘显示
如果文本文件 aa.txt 中不包含汉字,那么这段代码会正确显示文本文件的内容;如果 aa.txt 中包含汉字,
那么<程序 1>会将一个汉字的两个字节分别存储在数组 X 的两个元素中,<程序 2>认为这两个元素是两个
独立的 ASCII 码,分别对它们使用 CHR 函数。由于 ASCII 码超过 128 的字符在屏幕上不可见,所以 aa.txt
包含汉字时显示结果不正确。
改进的方法是将一个汉字的两个字节识别成一组,将第一个字节高移 8 位(乘以 28 即 256),再组合第
二个字节,最后统一转换。这样,我们将<程序 2>改造成<程序 3>。
‘<程序 3>
Dim I As Integer, S As String, Tmp As Single
I = 0
Do While I <= L - 1
If X(I) <= 128 Then ‘对于普通字符,直接转换
S = S & Chr(X(I))
I = I + 1
Else ‘与下一元素组合起来是一个汉字
Tmp = 256# * X(I) + X(I + 1)
S = S & Chr(Tmp)
I = I + 2
End If
Loop
MsgBox S ‘显示
2.2 网页中上传文件时恢复上传的字符
在进行 Web 开发时,经常需要上传文件,这时表单的 MIME 类型要指定为 multipart/form-data 方式。网
站服务器接收到二进制流后,需要将其中的一些信息恢复成正常的字符。
下面是 Internet 上流行的解码程序中的一个函数 getString,用于将一个二进制串恢复成字符。
‘<程序 4>
Function getString(StringBin)
For intCount = 1 to LenB(StringBin)
getString = getString & Chr(AscB(MidB(StringBin,intCount,1)))
评论0