首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • RandomAccessFile读取中文文件,
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 01:58:25 楼主
    想用RandomAccessFile读取一个中文文件,文件是个用XP下记事本保存的以UTF-8编码的文本文件.
    我先读取了2个字节,第一个字是中文.
    RandomAccessFile reader = new RandomAccessFile(sourceFile, "r");
    byte[] buff = new byte[2];
    reader.readByte(buff);
    System.out.println(new String(buff,"UTF-8");
    这样出现的不是问号就是乱码,请问应该如何读取?
    23  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wenzheng38
    • 等级:
    发表于:2008-05-01 03:52:371楼 得分:0
    为什么不一行一行的读呢
    String str=reader.readLine();

    System.out.println(new String(str,"UTF-8"));
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 05:54:562楼 得分:0

    因为它的每个读取都是读一个byte,由于UTF-8的编码模式是
    1110位15-12
    10位11-6
    10位5-0

    因此你每次读出来的数都是负数,因此无法处理

    建议在随机存取的时候不要有中文字符,如果有中文字符就用其它的类来实现。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 08:35:433楼 得分:0
    关注!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 16:12:414楼 得分:0
    我可以读取单个字节根据UTF-8的标志位来判断吧?
    因为要我要读取的只是个很大文件的极小部份,分散在文件中。所以我想这种方法最快了。
    看了上面的回复我本想这样做的,如果是UTF-8汉字那么应该是1110xxxx作为第一个字节的。和0xffff与一下,如果结果是-17那么就再读取2个字节。3个字节放在一个类型是byte长度为3的数组中buff。
    new String(buff,"UTF-8")这样来得到结果。
    可是和我想的好像还是有点出入。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 16:21:035楼 得分:0
    原来第一个汉字有6个字节,是一个“啊”字。
    可以转换成正确的汉字了,不过却是"?啊"。请问第一个问号是什么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 16:39:056楼 得分:0
    原来是windows的记事本在保存成UTF-8时会写入EF BB BF3个字节。后面开始才是正文。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 17:01:327楼 得分:0
    我也学到了东西 - -!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-02 09:39:238楼 得分:0
    引用 7 楼 qqxierh 的回复:
    我也学到了东西 - -!

    真的吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-02 21:09:519楼 得分:0
    我以前也没注意这些 看到这个贴才去看的API 然后发现的

    不知道LS有什么高见?

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-02 21:09:5310楼 得分:0
    我以前也没注意这些 看到这个贴才去看的API 然后发现的

    不知道LS有什么高见?

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-05 15:48:0711楼 得分:0
    该回复于2008-05-05 17:41:43被版主删除
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved