VB引用Fso不管事,直接open ... as #1乱码请问如何正确读取高手指点
解决方案 »
- 【散88分】求思路啊~!!视频剪辑咋弄?
- 如何获得焦点位置
- 高分求救,vb WebBrowser自动点击onClick
- 这几天学习vb类,类中的事件不明白
- [串口问题]单片机每次发送数据包为四个字节,如何接收呢?
- accsee里的空记录,取出来,放在MSFlexGrid里。调试时,老是有这个错误,实时错误‘94’无效使用 NULL。各位帮帮忙了。
- 高手快来!在页面设置中没有选中扩大缩小单选框(有百分比的)时,如何得知其中的比例值?
- 一个关于UpdateBatch 出错的问题,急!!!帮帮忙!!!!
- (简单问题)SQL语句错误
- 急急急,!!这样在VB中调用CHM格式的帮助文件!!???help me!
- VB导出数据到excel,第一次成功,第二次出错,提示:Method 'Sheets' of object '_Global' failed
- 如何关闭outlook.application
Open strSourFile For Binary Access Read As #1
ReDim buffer(LOF(1) - 1) As Byte
Seek(1,3)
Get #1, , buffer
Dim str As String = buffer
---------------------------------------------------------------------------------回复这个方法,对大部分的unicode编码,能正确显示,但是f8e1这个码位(是超出GBK表示极限的)
Dim zz As TextStream
Dim str
Set zz = Fso.OpenTextFile("e:\zz.txt", ForReading, , TristateTrue)
str = zz.ReadAll 或 richtextbox=zz.ReadAll
zz.Close
他读进来后还显示问号,即使直接赋给richtextbox也显示问号,但是如果在richtextbox框上,进行手动的输入,则显示正确,邪门VB能把所有的unicode表示的码,都认出来吗?上述的这些意见,对大部分的unicode码,管用,但是
请试一下f8e1这个码位 ,用eudcedit.exe在这个码上,造个字,肯定是问号??????有其他方法吗?
你试试用Byte数组读,然后用Strconv转换或者直接赋给string 看看可以吗
不行就只好用api转了
是用WideCharToMutiByte和MutiByteToWideChar吗??
我式过这两个,还是不行,如果用byte读unicode格式的txt文件,码位肯定读的正确
但是,显示问号??对此有兴趣的高手
请试一下f8e1这个码位 ,用eudcedit.exe造字程序在这个码上,造个字,显示出来肯定是问号
?????waiting......
VB有没有这样一个功能?????
比如
msgbox "\uf8e1" 这个语句是假设的
功能是显示f8e1这个字,而不是“f8e1”怎样实现这种功能???有哪位高手在VB编程环境里,显示f8e1这个码位的文字,正确。
????请大家试试,很邪门。
难道我是第一个提这种问题的???高手捧场
Strconv即可不知道是哪种编码怎么转换?你那句里的\是麻语言里字符转换的操作符吧
'*************************************************************************
'**FunctionName:DecipherFile
'**Input :strEncryptFilePath(String) -File Path which has been Encrypted
'** :strDecipherFilePath(String) -File Path which will Save Decipher Code
'**OutPut :bytNewData() -Decipher Code
'**Description :Decipher File which was Encrypted and made a new DecipherFile
'**Global Var :bytNewData
'**Author :YongJun-Zou
'**Data :2007-01-15 14:52:56
'**Version :V1.0.0
'*************************************************************************
Public Sub DecipherFile(strEncryptFilePath As String, strDecipherFilePath As String)
On Error GoTo ToExit '打开错误陷阱
'------------------------------------------------
Dim bytData() As Byte 'Save File Data
Dim lngLoop As Long 'For Loop
Open strEncryptFilePath For Binary As #1
ReDim Preserve bytData(LOF(1) - 1) As Byte
Get #1, 1, bytData 'Get Data from File
Close #1
For lngLoop = 0 To UBound(bytData)
Select Case bytData(lngLoop)
Case 11, 14
bytData(lngLoop) = bytData(lngLoop) - 2
Case 10, 13 'vbCrLf
bytData(lngLoop) = bytData(lngLoop)
Case 0
bytData(lngLoop) = 255
Case Else 'Normal
bytData(lngLoop) = bytData(lngLoop) - 1
End Select
Next
ReDim bytNewData(UBound(bytData)) As Byte
Call CopyMemory(bytNewData(0), bytData(0), UBound(bytData) + 1)
'Save a File that is Decipher Code
' If Dir(strDecipherFilePath) <> "" Then Kill strDecipherFilePath
' Open strDecipherFilePath For Binary As #1
' Put #1, 1, bytData 'Write New File which has been Deciphering
' Close #1
'------------------------------------------------
Exit Sub
'----------------
ToExit:
Debug.Print "Error Data:" & Format(Now, "YYYY-MM-DD HH:MM:SS")
Debug.Print "Error Type:" & Err.Number
Debug.Print "ErrorDescription:" & Err.Description
Debug.Print "ErrorSource:" & "DecipherFile"
Debug.Print "SystemTitle:" & "Form1"
End Sub
但是,把它赋给变量后,他显示的文字,有正确的,有不正确的,
尤其是F8e1这个unicode码位或其附近的,老是显示问号你上面的这段代码,我总结为copyfile 源文件,目标文件有其他方法吗?
以前有这方面的提问吗?
am i number one ??
数据库有的支持,有的不支持,也很邪门。****************************************************
VB有没有这样一个功能?????
比如
msgbox "\uf8e1" 这个语句是假设的
功能是显示f8e1这个字,而不是“f8e1”
****************************************************这条语句是我瞎写的,我是想说,VB有没有这种功能,在.net 中,“\u”+码位,是显示文字,而不是显示“码位”字符串,VB有这种类似的功能吗?
我查这不少文章,说window的编码是unicode.
而系统的编码好像是GB3212
但如果原字符串是非GB3212编码的,如繁体、utf8。
等,系统显示就会出现乱码!主要是中文乱码!
实际上问题在于各编码的转换!第二、open方法后input读取也存在分字串和字节读取二类。字串读取我没试过。
但字节读取就会出现问题。
如果字节读取出现乱码,可用strconv转换,转成unicode还原!
如果是繁体编码:则用strconv这样转:繁体——unicode——GB3212
相反也成!(有人做过这样的函数,但我没测试)按这样的原理:UTF8——unicode——GB3212
转换也应可以,但我却不知道如何转!这就是我的问题
大家知道的话给指点一下!
只要用 dim a as string 再赋值肯定会出错.不光这一个码位.无可奈何的vb
当然你可以Copy你所造字体到其他的电脑里去显示。
说明:测试环境:XP (English)/SP2,VB6 (En) SP6.我用的是我自编的 DLL/TLB Extend Unicode TextBox和Unicode RichEdit (using CreateWindowExW)。
因为你造的字在自己的电脑里,所以只能本机显示
'''''''''''''''''''''''''''''''''''''''''''''''''这句话正确,但是如果换一台机器
他的确是显示不出来,但是他绝不应该显示问号??用记事本保存 你unicode格式,你再试试举例
a.txt 保存为unicode格式
内容是
“我们”如果“我”是造的字的话
在其他机器上则应显示“ 门” 应以空格替代,而不应是问号可以试试
在其他机器上则应显示“ 门” 应以空格替代,而不应是问号答:在你假设的条件下,“我”在其他机器上则显示一个小框,不是问号(你说的对,不是“?”)。问题是a.txt是Unicode或UTF-8文件吗?如果你Save成ANSI,那肯定是奇怪的乱码了。
在其他机器上则应显示“ 门” 应以空格替代,而不应是问号答:在你假设的条件下,“我”在其他机器上则显示一个小框,不是问号(你说的对,不是“?”)。问题是a.txt是Unicode或UTF-8文件吗?如果你Save成ANSI,那肯定是奇怪的乱码了。
注意:在其他机器上(没有安装你创建的字符),则显示一个小框,在本机显示正确,为你所创建的字。
(完,不在回答,good luck!)
Public Function UnicodeFile_Read_VB(ByVal sFileName As String) As StringDim FF As Long
Dim b() As Byte
Dim s As StringConst uBOM As String = "ÿþ"On Error Resume NextFF = FreeFile
Open sFileName For Binary Access Read As FF
ReDim b(LOF(FF))
Get FF, , b
Close FF
If b(0) = 255 And b(1) = 254 Then
s = b
Else
s = StrConv(b, vbUnicode) 'ANSI file
End IfUnicodeFile_Read_VB = sEnd FunctionPublic Sub UnicodeFile_Write_VB(ByVal sFileName As String, _
ByVal vVar As String, _
Optional ByVal bInsertBOM As Boolean = True)Dim FF As Long
Dim b() As ByteOn Error Resume Next
Kill sFileName
On Error GoTo 0
FF = FreeFile
Open sFileName For Binary Access Write As #FF
If bInsertBOM Then
ReDim b(1)
b(0) = &HFF
b(1) = &HFE
Put #FF, , b
Erase b
End If
b = vVar
Put #FF, , b
Close #FF
End Sub