Java将一些中文存入到文本文件, 那么VB如何读取?

马行空牛耕田 2005-10-29 10:48:47
如题: Java将一些中文存入到文本文件, 那么VB如何读取? 可否给我一个例子,包括Java代码和VB代码,谢谢!
...全文
342 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
马行空牛耕田 2005-11-03
  • 打赏
  • 举报
回复
问题自己解决了,解决方案如下:
条件分析
输入:utf8编码的文本文件
输出:vb的text框显示文本文件中的中文

处理步骤:
1、Java将utf8中文使用OutputStream写入文件(我先前使用RandomAccessFile的writeUTF);
2、VB使用binary access read方式读文件
3、使用win32的MultiByteToUnicode进行转码,转码时注意使用CP_UTF8作为code page;
4、将转码后的unicode,使用StrConv(strUnicode, vbWide)进行转换,即可得到正确的中文

中文字符走了一通,从java写入到unix文件系统,再从windows vb程序读入并显示,经历了以下变化:
中文编码(gbk或者big5等到)(jsp页面)
--> utf8 (java中用unicode表达它)
--> utf8(unix 文件系统)
--> unicode (windows vb 读入utf8,调用MultiByteToUnicode转成vb unicode)
--> 中文编码(仍在vb中显示,其实这里应该仍然是unicode,但是是中文的unicode,而不是前面的utf8的unicode)

说得不对的地方,敬请指正。

而对于我自己来说,这次的中文之旅,让我受益匪浅,对于unicode、utf8、中文编码在unix java平台、windows vb平台的转换,有了相当的体会。高兴之余,也谢谢大家的关照和提点。 再次深表感谢!
马行空牛耕田 2005-11-02
  • 打赏
  • 举报
回复
代码如下:
Private Sub cmdRead_Click()
Dim strLine As String
Dim strTemp As String

Dim testFile As String
Dim TmpData() As Byte

testFile = unicFile.Text
Open testFile For Binary Access Read As #2
ReDim TmpData(1, LOF(2))

Get 2, , TmpData

strTemp = StrConv(TmpData, vbWide)
txtUTF.Text = strTemp

Close #2

End Sub

strTemp = StrConv(TmpData, vbWide)报错:13,类型不匹配,我昏了,但是我看到别的例子是这么写的啊! 救命啊!
马行空牛耕田 2005-11-02
  • 打赏
  • 举报
回复
不行,我的数据现在是utf8,不是unicode了,怎么转呢?
马行空牛耕田 2005-11-02
  • 打赏
  • 举报
回复
因为java在unix上运行,生成unicode文件不同于windows平台,所以我放弃用unicode而改用utf8编码。
所以现在我改用vb读取utf8编码的文件了。 读取和转换的方式如下:
1、Open testFile For Binary Access Read As #2 'binary 方式读取
Get 2, , TmpData '用get方式读入byte()
strTemp = TmpData
用这种方式读取对吗?

2、nSize = MultiByteToWideChar(CP_ACP, 0, ByVal strTemp, -1, strLine, 0)
使用MultiByteToWideChar将utf8数据转成unicode,但是我使用的codepage是 ANSI, 是不是要改成CP_UTF8呢? 那么MultiByteToWideChar我使用的对不对呢?

3、txtUnicode.Text = StrConv(strLine, vbFromUnicode)
得到unicode后,我将unicode使用StrConv转成系统默认的编码并显示

这3步骤是从网上得来的,但是我的VB水平欠佳,不知道都写得对不对。 请帮忙看看,谢谢!
Robin Bao 2005-11-02
  • 打赏
  • 举报
回复
up一下
马行空牛耕田 2005-11-01
  • 打赏
  • 举报
回复
to viena
谢谢,我再试试
马行空牛耕田 2005-11-01
  • 打赏
  • 举报
回复
To subzero, viena,谢谢!
我之所以需要逐行读取,是因为我一次读一行,再将该行内容贴到一个控件上,每次只能最多贴256个字节; 而且该文本是有格式的,一行就是一行。
不过我再试试,像 viena说的那样, 判断换行符,一次读,逐行贴!
viena 2005-11-01
  • 打赏
  • 举报
回复
逐行读取很慢的,判断换行符分行就可以了
subzero 2005-11-01
  • 打赏
  • 举报
回复
直接读到一个byte数组里面然后
str=数组
马行空牛耕田 2005-11-01
  • 打赏
  • 举报
回复
郁闷,如果我想逐行读取数据,但是又要用binary方式读取,可行吗? 哪位大哥给我来点代码,谢谢了!
马行空牛耕田 2005-11-01
  • 打赏
  • 举报
回复
现在我用java将繁体中文数据存到unix机器上,用来utf8编码。 该文件能在win2k的机器上用notepad打开,正常显示,但是用vb读取并打开则不行。 也许我得试试其他读文件的方法。我读的时候仍然是用“Open testFile For Input As #2”,而没有用二进制方式!
继续测试吧。呵呵,助我成功!
马行空牛耕田 2005-10-29
  • 打赏
  • 举报
回复
谢谢 faysky2() , 我用Java写的unicode文件,用文本编辑器打开来看,选择另存,会发现它的文件类型是unicode; 所以我用了txtUTF.Text = StrConv(strLine, vbFromUnicode)来读。


另外,我把环境再描述一下:
Java写Unicode时,是在unix机器(编码iso-8859-1)的websphere上运行。Java从数据库里拿出utf8的繁体中文字,然后通过转换,写成unicode文件到unix本地。
VB读文件时,是在繁体中文版的机器上运行!
faysky2 2005-10-29
  • 打赏
  • 举报
回复
vb读:
Private Sub Command1_Click()
Dim strOut As String, arrOut As Variant
Open "c:\test1.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, temp
strOut = strOut & temp & vbCrLf
Loop
Close #1
arrOut = Split(strOut, vbCrLf)
Text1.Text = arrOut(0)
Text2.Text = arrOut(1)
Text3.Text = arrOut(2)
End Sub
viena 2005-10-29
  • 打赏
  • 举报
回复
sorry,写错了,是Unicode,我的屏幕反光,没看清楚
viena 2005-10-29
  • 打赏
  • 举报
回复
VB读文本文件会自动由Ansi转Uinicode,因为VB中的String就是Uinicode

你用二进制方式读取到Byte数组,直接赋值给字符串就可以了
马行空牛耕田 2005-10-29
  • 打赏
  • 举报
回复
我在vb读取这个unicode文件的时候,使用了StrConv(strLine, vbFromUnicode),但是全是乱码。
我现在正在追踪是否是java 写unicode文件存在问题,但不知VB读unicode文件就是否如此呢?

7,785

社区成员

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

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