挑战vb高手(字符串方面)vc做得到的vb能做到么?---问题再加100分

hualahuala 2003-08-19 10:30:30
http://expert.csdn.net/Expert/topic/2160/2160806.xml?temp=.487179
分数不够,可以再加
我一直用vc但vb没用过现在要在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中怎么解决呢?
我把文件发到这个邮箱,你们动手看一下,和你们想象的不一样的
sun_programmer@etang.com
pwd:sun_programmer
etang的免费用户
...全文
36 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyl910 2003-08-20
  • 打赏
  • 举报
回复
Edit是Windows系统提供的控件
MFC只是把它封装成了类
(VB封装成了TextBox,只不过只封装了ANSI版的)
Greaitm 2003-08-20
  • 打赏
  • 举报
回复
给我具体例子吧,Edit控件是不是MFC的?不能用在VB
zyl910 2003-08-20
  • 打赏
  • 举报
回复
写好了
http://www.fantasiasoft.net/Zyl910/SDK_Edit.zip
tanyx 2003-08-20
  • 打赏
  • 举报
回复
挑战初学者吧?
iiboy 2003-08-20
  • 打赏
  • 举报
回复
RichTextbox.LoadFile("FileName")
iiboy 2003-08-20
  • 打赏
  • 举报
回复
利用RichTextBox控件吧
Greaitm 2003-08-19
  • 打赏
  • 举报
回复
如果阁下能够用VC搞定的话,以下这个的功能是跟VC一样的;我自己的测试也是成功的:
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 Long

Private 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
' MsgBox (StrConv(LoadBytes, vbUnicode))
MessageBox 0, VarPtr(LoadBytes(1)), "", 0
End Sub
现在还是人类 2003-08-19
  • 打赏
  • 举报
回复
To hualahuala (qq)
==================================
看过我的文章了吗?应该可以实现的,你试一下。
hualahuala 2003-08-19
  • 打赏
  • 举报
回复
我现在用的是代理上网;无法开ftp;
把信箱或者可以上传的ftp给我一个;我来发给你
hxy2003 2003-08-19
  • 打赏
  • 举报
回复
UP
Greaitm 2003-08-19
  • 打赏
  • 举报
回复
而我自己用来测试的文本内容如下:
[class]

[cbr options]
reaction_delay_factor = 16 ;延时
averagin_period = 100 ;周期
buffer = 100 ;平滑度

[global]
halfpel = 0 ;使用Mpeg4半像素插值,能使图像清晰,motion_search 为4以上时,自动置位
motion_search = 4 ;可设值为0-6 数值越高 图像质量越高 码流越低 占cpu越高。
quant_type = 0 ;0 H263 1 MPEG 2 MPEG_CUSTOM
max_key_interval = 50 ;关键帧最大间隔
min_key_interval = 1 ;关键帧最小间隔
lum_masking = 0 ;使用亮度蒙版,即DX50中的心理亮度,对质量影响不大,码流反而增大,CBR慎用,
interlacing = 0 ;隔行画面处理 对pal无用
greyscale = 0 ;灰度

[quantization]
max_pquant = 31 ;最大量化
min_pquant = 2 ;最小量化


;Set By Greatim Xvid0.91

显示的内容中一个问号都没有出现过。
zyl910 2003-08-19
  • 打赏
  • 举报
回复
对于文本框:


去学SDK编程
用CreateWindowExW创建Edit控件
再发消息控制
Greaitm 2003-08-19
  • 打赏
  • 举报
回复
不是我们不肯试,实在是你的文本根本无法下载,只能在Ie里直接打开,但我们看到的也是只有一个字符的文本!
现在还是人类 2003-08-19
  • 打赏
  • 举报
回复
给你一个我以前做的函数吧,因该可以解决你的问题


Public Function 合并字节数组为文本(字节数组() As Byte) As String
Dim X As Variant, 字符值 As Variant, 运算数字1 As Variant, 运算数字2 As Variant, 已处理字节数 As Variant
已处理字节数 = LBound(字节数组)
For X = LBound(字节数组) To UBound(字节数组)
If 字节数组(X) >= 176 And 字节数组(X + 1) >= 160 Then
运算数字1 = 字节数组(X)
运算数字2 = 字节数组(X + 1)
字符值 = 运算数字1 * 256 + 运算数字2
If 字符值 >= 32768 Then
字符值 = -(65536 - 字符值)
Else
字符值 = 字符值
End If
合并字节数组为文本 = 合并字节数组为文本 & Chr(字符值)
X = X + 1
已处理字节数 = 已处理字节数 + 2
Else
字符值 = 字节数组(X)
合并字节数组为文本 = 合并字节数组为文本 & Chr(字符值)
已处理字节数 = 已处理字节数 + 1
End If
If 已处理字节数 >= UBound(字节数组) Then
Exit For
End If
Next X
End Function


使用方法:
dim 显示的文本 as String,LoadBytes() as Byte
ReDim LoadBytes(1 To Filelen("d:\codeTEST.txt"))
TempFile = FreeFile
Open "d:\codeTEST.txt" For Binary As #TempFile
Get #TempFile,1, LoadBytes
Close TempFile

显示的文本=合并字节数组为文本(LoadBytes)
msgbox 显示的文本,64,"文本内容"
Greaitm 2003-08-19
  • 打赏
  • 举报
回复
以上例子我试过是可以的,还要注意的地方是,你如果是在Win2000下,还有其他格式的文本(打开记事本就可以知道),以上代码就不成立了。
还有,这个转换在中文底下只支持中文转换成Unicode,如果是日文或其它就必须修改一下:
Strconv(loadBytes,vbUnicode,代码页)'代码页: 简体中文是&h0804,台湾中文是&h0404,...(其它我就不知道了,要自己查)。
hualahuala 2003-08-19
  • 打赏
  • 举报
回复
由于文件比较特殊,请大家最好动手做一下在发言,如果出来完整的字符串,并且中间没有问号,您再将您的程序贴上;非常感谢!
楼上的这位,您的方法和我已经试过的一样;都不行的,用这种方法,只能显示一个字符!
无论如何,还是很感谢您!
谢谢!
Greaitm 2003-08-19
  • 打赏
  • 举报
回复
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
MsgBox (StrConv(LoadBytes, vbUnicode))

因为使用字节数组而获得的字符都是DBCS+SBCS,而vb的字符串是Unicode所以要转换一下
hualahuala 2003-08-19
  • 打赏
  • 举报
回复
大家不要用OUTLOOK下载,会删除文件的,其他人就看不到了
hualahuala 2003-08-19
  • 打赏
  • 举报
回复
大家动手做一下吧,感觉你们说得我都是过了
danielinbiti 2003-08-19
  • 打赏
  • 举报
回复
01 = StrConv(LoadBytes, vbFromUnicode)

改为
01 = StrConv(LoadBytes, vbUnicode)

vbFromUnicode是DBCS+SBCS字符串,
VBUnicode 是双字节,byte数组用vbFromUnicode只能取到一半。
加载更多回复(31)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧