Thanks a lot, jamex(亲亲吾爱),非英文字符是指中文,日文等和其它一些特殊字符.我注意了些字符是双字节的,但还是乱麻.
解决方案 »
- VB获取分页怎么实现?
- 各位老手新手朋友们,来讨论怎么样用VB建立局域网即时信息发布及接收
- 如何读取access数据库中数据的类型
- 读随机文件的问题
- 我要写病毒了(一个被黑N次的无奈的人)
- 简单的窗体中输入位数检查的方法?(在线等,马上给分)?
- 帮帮忙,用VB6如何来解析XML文件?????谢谢各位老大
- 曾经有一段代码能往ie(webbrowser)控件里面写代码生成控件,但是我没有珍惜........
- 想开发一个字练习软件,欢迎大家提供思路、资料和意见
- 如何获取数据中的最大日期组数据
- 程序运行太慢了,有办法加快吗?
- VB+SQLServer,大家招聘人的身份出一个题来考一考面试的人(主要对数据库操作)
看一下这里,
Dim b(10) As Byte
b(0) = &HE7
b(1) = 0
b(2) = &HE8
b(3) = 0
b(4) = &HE9
b(5) = 0
Text1.Text = Text1.Text & VBA.StrConv(VBA.StrConv(b, vbFromUnicode), vbUnicode)End Sub
text1中&HE7还是显示不出来
api画是没问题,但不知道怎么让控件也可以显示
1、从存储到读取上解决。采用UniCode存储就可以了。2、现行文件以GB2312存储。所有Ascii大于127(扩展码)的都是汉字的半角。而小于128并大于31的都是可以显示的英文字符。对于GB2312的问题,可以采用奇偶累加办法来解决。当第一次遇到扩展码时,开始计算奇偶。遇到偶数则将两个字节完整拼为一个。但问题是VB内以UniCode显示汉字,所以还要做代码转换。对于一个现成的文件,应当采取定义相似类型的方式读为String。而你自己设计二进制文件则要把字符串自行转换成Byte数组。以下程序就是专门把字符串转换成Byte数组的程序,兼容中文,而且提供了转换回来的函数。Function StringGetByBytes(pBytes() As Byte) As String
'StringGetByBytes函数
'语法:tOutString=StringGetByBytes(pBytes())
'功能:从Byte数组获得字符串[兼容中文]
'参数:pBytes() 保存字符串的Byte数组。
'返回:tOutString Byte数组中保存的字符串。
Dim tOutStr As String
Dim tLoop As Integer
Dim tByteLen As Integer
tByteLen = UBound(pBytes)
For tLoop = 0 To tByteLen
tOutStr = tOutStr & ChrB(pBytes(tLoop))
Next
StringGetByBytes = tOutStr
End FunctionFunction BytesGetByString(ByVal pString As String, pBytes() As Byte) As Integer
'StringGetByBytes函数
'语法:[tOutInt=]BytesGetByString(pString, pBytes())
'功能:将字符串保存到数组[兼容中文]
'参数:pString 被保存的字符串。
' pBytes() 保存字符串的Byte数组。
'返回:tOutString Byte数组的元素数量。
Dim tStrLength As Integer
Dim tLoop As Integer
Dim tCodeStart As Byte
tStrLength = LenB(pString)
For tLoop = 1 To tStrLength
tCodeStart = AscB(MidB(pString, tLoop, 1))
ReDim Preserve pBytes(tLoop - 1)
pBytes(tLoop - 1) = tCodeStart
Next
BytesGetByString = tStrLength
End Function
Dim TempFile As Long
Dim LoadBytes() As ByteTempFile=FreeFile
Open 文件名 For Binary As #TempFile
Redim LoadBytes(1 To Lof(TempFile)) As Byte
Get #TempFile,,LoadBytes
Close TempFileText1.Text=StrConv(LoadBytes,vbUniCode)写入:
Dim TempFile As Long
Dim SaveBytes() As ByteSaveBytes=StrConv(Text1.Text,vbFromUniCode)TempFile=FreeFile
Open 文件名 For Binary As #TempFile
Put #TempFile,,SaveBytes
Close TempFile
pBytes()必须是动态数组
pBytes()必须至少有一个元素(用ReDim声明为pBytes(0))下面的方法可以预防这种错误的产生。
Dim tTestStr As String
Dim tTestBytes() As Byte
ReDim tTestBytes(0)
If CBool(Len(tTestStr)) Then
BytesGetByString tTestStr,tTestBytes()
End If另外你可以在调试状态测试:
1、pBytes()是不是数组
2、pBytes()有几个元素(如果参数数组没用ReDim定义至少有1个元素。那就可能出错了)
3、tLoop的值是否大于0另外需要说明的是:我提供给你的函数不能把其他格式的字符串的Byte正确转换成字符串。只有把字符串用上面的函数转换成Byte数组保存,才可以用上面的函数转换回来。 如果你想把一个现成的格式的文件的字符串读取出来那要用Type语句定义和这个文件相似的字段类型才可以。另外需要注意的是VB在保存字段字符串的时候有个Bug,假如你定义一个String * 12的子变量,而实际上这个变量占用24Byte的空间,但是只保存12Byte的信息。后面的12Byte是死区,无法操作。这个Bug体现在写操作上,但不影响读。
我上面提供的函数就是解决这个问题的一个临时办法。