Java将中文转成unicoade存入到文本文件,如何使用VB程序读取?

马行空牛耕田 2005-10-29 10:39:51
如题: Java将一些中文存入到文本文件, 那么VB如何读取? 可否给我一个例子,包括Java代码和VB代码,谢谢!
...全文
758 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
马行空牛耕田 2005-11-05
  • 打赏
  • 举报
回复
等了两天,结贴!
马行空牛耕田 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平台的转换,有了相当的体会。高兴之余,也谢谢大家的关照和提点,尤其是keiy,一直关注本贴。 再次深表感谢!
马行空牛耕田 2005-11-02
  • 打赏
  • 举报
回复
嗯,最后我将中文转成utf-8存储了,用notepad直接打开可以看到中文,但是问题是vb读的时候存在乱码,怎么读呢? 哪位大哥如果知道就告诉我,我也回去vb那边问问的,谢谢了!
柯本 2005-10-29
  • 打赏
  • 举报
回复
//以下是用java写一个标准的unicode文件程序
//通过这样转换后.用VB可当标准文件读入
import java.io.*;

public class filetest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int k=0xfffe; //windows unicode 文件头标记
try{
String msg="这是一个测试";
// msg = new String(msg.getBytes(), "GB2312");
DataOutputStream out =
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("d:\\temp\\test.txt")));
out.writeChar(k); //写unicode文件头
for(int i=0;i<msg.length();i++) {
k=msg.charAt(i);
k = (k >> 8) | ((k << 8) & 0xff00) ; //转成intel格式
out.writeChar(k);
}
out.close();

System.out.println("文件成功写入!");
}
catch(Exception e)
{
System.out.println(e);
}

}

}
马行空牛耕田 2005-10-29
  • 打赏
  • 举报
回复
我在Java版和VB版都有发贴,因为Java写unicode文件、VB读unicode文件,两个都有关系,Java如果写得不对,VB死也读不出来啊!

而且,Java写Unicode时,是在unix机器(编码iso-8859-1)的websphere上运行; VB读文件时,是在繁体中文版的机器上运行!
网络精灵 2005-10-29
  • 打赏
  • 举报
回复
直接读就行了,要VB代码的话,最好到VB社区。不过,你可以自己写个,可用最简单的读文件试试。
柯本 2005-10-29
  • 打赏
  • 举报
回复
strLine = "\u4e2d\u6587\u6d4b\u8bd5"
VB不支持\u的转义
办法还是有的,不过繁了
在VB中要将"\u4e2d\u6587\u6d4b\u8bd5"转成
&h2d,&h4e,&h87,&h65,&h4b,&h6d,&hd5,&h8b 的一个字串,然后再用 StrConv转成当前字符集的字符(VB我不熟,你试一下)
如是这样,还不如用我的方法.存成直接的unicode内码文本
马行空牛耕田 2005-10-29
  • 打赏
  • 举报
回复
因为“\u4e2d\u6587\u6d4b\u8bd5”已经被我用文本记录了下来,所以我在VB中做如下测试:
strLine = "\u4e2d\u6587\u6d4b\u8bd5"
txtUnicode.Text = StrConv(strLine, vbFromUnicode)
结果错误。

而\u4e2d\u6587\u6d4b\u8bd5是我在Java中用了一个方法转的,所以能在Java中还原就最好,java方法如下:
public static String ChineseToUnicode(String s) {
StringBuffer bu = new StringBuffer(s);
String unicode = "";
for(int i = 0; i < bu.length(); i++) {
String tmp = Integer.toHexString((int)bu.charAt(i));
unicode = unicode + "\\u" + tmp;
}
return unicode;
}
柯本 2005-10-29
  • 打赏
  • 举报
回复
再:
现在我将一些繁体中文转成“\u4e2d\u6587\u6d4b\u8bd5”这种unicode编码,不知如何可以将它们转回到繁体中文呢?
--------------------------------------------------------------------------------
我觉得在VB中转更方便些,如果StrConv有问题,可直拉用API的
MultiByteToWideChar和 WideCharToMultiByte

柯本 2005-10-29
  • 打赏
  • 举报
回复
我试了一下(linux 9,LANG=en_US.iso885915)
1.// msg = new String(msg.getBytes(), "GB2312");
要把//去掉.因为系统是8859字符集,要转成GB2312
2. out.writeChar(k); //写unicode文件头
要去掉,因为vb不认unicode文件头(VB6+WIN2K)
3.VB的程序如下:
Dim iReadNumber As Integer '读文件号
Dim mem() As Byte 'byte数组
Dim strFileName As String '文件名
Dim lLength As Long '文件长度

'将文件内容读入mem byte数组
iReadNumber = FreeFile
strFileName = "d:\temp\test.txt"
lLength = FileLen(strFileName)
ReDim mem(lLength) As Byte
Open strFileName For Binary As #iReadNumber
Get #iReadNumber, , mem
Close #iReadNumber
MsgBox mem
显示正常,如果你是繁体中文版,可用StrConv转一下试试
马行空牛耕田 2005-10-29
  • 打赏
  • 举报
回复
顺便再问一下: 现在我将一些繁体中文转成“\u4e2d\u6587\u6d4b\u8bd5”这种unicode编码,不知如何可以将它们转回到繁体中文呢? 因为我会把这些编码存到database,如果再拿出来,用new String(getBytes(),"big5")是做不到转换的。 郁闷中……
马行空牛耕田 2005-10-29
  • 打赏
  • 举报
回复
谢谢楼上的keiy() , 我正在试,不过我发现我用java在unix上存成的文件,编码居然是:unicode big endian, 这是怎么回事呢?

另外,keiy说“用VB可当标准文件读入”,是否说明我用vb读的时候,不需要做任何转换就可以了呢,因为现在我用了vb函数strconv来做unicode的转换。 而刚刚测试发现全是乱码

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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