将Ascii大于127的符号写入文件,为什么读出来的时候是多个字符解决思路
将Ascii大于127的符号写入文件,为什么读出来的时候是多个字符我写了如下代码:Open E:\a.txt For Binary
将Ascii大于127的符号写入文件,为什么读出来的时候是多个字符
我写了如下代码:
Open "E:\a.txt" For Binary As #1
Put #1, , Chr(8634)'先写入文件
Close #1
Open "E:\a.txt" For Binary As #1
Dim b(5) As Byte'再重新读出来
Get #1, , b
a = StrConv(b, vbFromUnicode)'将字节数组转成字符串
Close #1
上面的写入文件那里,我将Chr(8634)写入文件,原本文件是空的。然后立马读出来,却发现最后出来的字符串(赋值给a变量的字符串)是“?!”,其实还有别的,我用记事本打开文件,数了一下是5个符号,包括空格,如下:
!
所以我就不明白了,Chr函数出来的不应该是一个字符吗?怎么有那么多个,而且这些字符的Ascii码和8634扯不上半毛钱关系,到底是为什么呢?
[解决办法]首先,chr返回的是一个包含String的Variant
其次,Put写包含String的Variant值时,会先写入两个字节的描述符(描述Variant包含的是什么类型,String是8),再写入两字节字符串长度,剩下的就是字符串。
因此写入的字符串(用Variant表示的)总会比实际的多4个字节,与其编码没有丝毫关系。如想写什么,得什么,你应该显示定义String,再写:
Open "E:\a.txt" For Binary As #1
Dim s As String '显示定义String
s=Chr(8634)
Put #1, , s '先写入文件
Close #1