分数不够,可以再加
有一个unicode文件,里面有一些西欧字符
现在要把读出来,用对话框显示
我用了下面一段程序,但是出问题,很多字符不能正常显示
请大家帮忙
Dim TempFile As Long
Dim LoadBytes() As Byte
TempFile = FreeFile
Open "d:\codeTEST.txt" For Binary As #TempFile
ReDim LoadBytes(1 To LOF(TempFile)) As Byte
Get #TempFile, , LoadBytes
Close TempFile's 01 = StrConv(LoadBytes, vbFromUnicode) MsgBox (LoadBytes)
其中关闭掉的那一行也不起什么作用,显示的字符还没有关闭后显示得多
请问应该怎么设置,是否loadbytes不对,应当设置为双子节的数据类型
vc中能够解决,可是vb中怎么解决呢?
有一个unicode文件,里面有一些西欧字符
现在要把读出来,用对话框显示
我用了下面一段程序,但是出问题,很多字符不能正常显示
请大家帮忙
Dim TempFile As Long
Dim LoadBytes() As Byte
TempFile = FreeFile
Open "d:\codeTEST.txt" For Binary As #TempFile
ReDim LoadBytes(1 To LOF(TempFile)) As Byte
Get #TempFile, , LoadBytes
Close TempFile's 01 = StrConv(LoadBytes, vbFromUnicode) MsgBox (LoadBytes)
其中关闭掉的那一行也不起什么作用,显示的字符还没有关闭后显示得多
请问应该怎么设置,是否loadbytes不对,应当设置为双子节的数据类型
vc中能够解决,可是vb中怎么解决呢?
解决方案 »
- 关于rs.Open "select *
- 怎样将内容输出到 WebBrowser 中???急问
- 有关RichTextBox和SQL的两个问题
- 有关Text框的问题
- 怎样控制串行或并行口???
- vb怎么做视频会议啊??及!!!!!!!!!!!!!
- Microsoft VBScript 运行时错误 错误 '800a01a8'
- vb 局部,非静态变量太多 怎么解决
- SQL SERVER中的raiserror, 与vb中的err.number ??
- 用什么API函数可以对串口操作?不用控件。
- 本人有一个点歌程序,要求用VB ,有偿开发
- 挑战vb高手(字符串方面)vc做得到的vb能做到么?---问题再加100分
怎么定义这个双字节的数组呢?
我是用vc的,vb不熟,望大家帮忙!
谢谢
Dim TempBytes() As Byte
Open 文件名 For Input As #1
TempBytes = InputB(LOF(1), #1)
Close #1
Text1.Text = StrConv(TempBytes, vbUnicode)写:
Open 文件名 For OutPut As #1
Print #1,Text1.Text
Close #1
TempBytes = InputB(LOF(1), #1)
什么意思呢?
看不懂
下面这句代码是转换为unicode字符吗?
究竟要转换成什么样的字符?才能正确显示呢?
Text1.Text = StrConv(TempBytes, vbUnicode)
而一般的文本文件是基于ANSI+DBCS的
所以需要用StrConv转换vbUnicode:将ANSI+DBCS的Byte数组转为Unicode的String
vbFormUnicode将Unicode的String转为ANSI+DBCS的Byte数组
Input 函数
返回 String,它包含以 Input 或 Binary 方式打开的文件中的字符。语法Input(number, [#]filenumber)Input 函数的语法具有以下几个部分:部分 描述
number 必要。任何有效的数值表达式,指定要返回的字符个数。
filenumber 必要。任何有效的文件号。
说明通常用 Print # 或 Put 将 Input 函数读出的数据写入文件。Input 函数只用于以 Input 或 Binary 方式打开的文件。与 Input # 语句不同,Input 函数返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。对于 Binary 访问类型打开的文件,如果试图用 Input 函数读出整个文件,则会在 EOF 返回 True 时产生错误。在用 Input 读出二进制文件时,要用 LOF 和 Loc 函数代替 EOF 函数,而在使用 EOF 函数时要配合以 Get 函数。注意 对于文本文件中包含的字节数据要使用 InputB 函数。对于 InputB 来说,number 指定的是要返回的字节个数,而不是要返回的字符个数。
因为你需要StrConv(str, vbUnicode)
转化一下
我把文件发到这个邮箱,你们动手看一下,和你们想象的不一样的
[email protected]
pwd:sun_programmer
etang的免费用户
或发至 [email protected] 也可
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As Long, ByVal lpCaption As String, ByVal wType As Long) As LongPrivate Sub Form_Load()
Dim TempFile As Long
Dim LoadBytes() As Byte
TempFile = FreeFile
Open "c:\xvidcore.ini" For Binary As #TempFile
ReDim LoadBytes(1 To LOF(TempFile)) As Byte
Get #TempFile, , LoadBytes
Close TempFile
MessageBox 0, VarPtr(LoadBytes(1)), "", 0
End Sub
FTP下载账号:test
FTP下载密码:test
地址:test.qyeee.com
是你自己没讲清楚,耽误时间是当然的
然后可以直接显示
可是我vb不会,不知道该怎样定义这种结构体来解决这个问题
就是定义双字节的字符数组,来存放读入的二进制数据
你有办法么?
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Declare Function MessageBoxW Lib "user32" (ByVal hWnd As Long, ByVal lpText As Long, ByVal lpCaption As Long, ByVal wType As Long) As LongPrivate Sub Command1_Click()
Dim hFile As Integer
Dim TempBytes() As Byte
hFile = FreeFile()
Open "c:\downloads\codetest.txt" For Binary As #hFile
ReDim TempBytes(1 To LOF(hFile))
Get hFile, , TempBytes
Close hFile
'MsgBox TempBytes
Dim TempStr As String
TempStr = String(UBound(TempBytes) \ 2, vbNullChar)
CopyMemory ByVal StrPtr(TempStr), TempBytes(1), UBound(TempBytes)
'MsgBox TempStr
'MessageBoxW Me.hWnd, StrPtr(TempStr), StrPtr(Me.Caption), 0
End Sub
将“'MessageBoxW Me.hWnd, StrPtr(TempStr), StrPtr(Me.Caption), 0”去掉注释先前调试时注释的,忘了恢复
非常感谢
非常感谢
zyl910(910:分儿,我又来了!) ( )
问题解决了,哈哈哈,谢谢
马上准备结账,给你300分(100分另开目录)
因为还有100分要给其他热心的人
等一下你再会我的贴子,看到后请huifu
CopyMemory ByVal StrPtr(TempStr), TempBytes(1), UBound(TempBytes)
这句话中strptr是个什么东西呢?怎么没有定义呢?抱歉我vb不会;不定义也可以么
还有最后一句中
'MessageBoxW Me.hWnd, StrPtr(TempStr), StrPtr(Me.Caption), 0
vb中使用的是Me这个参数么?就是父窗口的指针么?和vc中很不一样阿
呵呵;解释一下好么?
我马上再开贴子
用于得到字符串的数据的地址
me是指当前类模块(窗口模块也是类模块)
http://expert.csdn.net/Expert/topic/2164/2164081.xml?temp=.4780237
此贴先给你结100分。这个等到讨论完再结分。顺便考虑一下再文本框里面怎么
做.
夜草:
我们顺便也考虑一下,文本况钟怎么样解决!大家都是学点东西,分不够我可以再加
我不小气的!
Dim LoadBytes() As Byte
Dim value As Long
Dim Ii As Integer
Dim result As StringTempFile = FreeFile
Open "e:\codeTEST.txt" For Binary As #TempFile
ReDim LoadBytes(1 To LOF(TempFile)) As Byte
Get #TempFile, , LoadBytes
Close TempFileresult = ""
'头两个字节(FF FE)是Unicode文件标志
For Ii = 3 To UBound(LoadBytes) Step 2
value = LoadBytes(Ii) + LoadBytes(Ii + 1) * 256&
result = result & ChrW(value)
Next MsgBox result
MFC只是把它封装成了类
(VB封装成了TextBox,只不过只封装了ANSI版的)
http://www.fantasiasoft.net/Zyl910/SDK_Edit.zip