`

Java文件流 编码问题 - 读取文件时指定字符编码

 
阅读更多

  折磨了一天的问题,终于在黄昏的时候解决了,现在一吐为快。

 

    众所周知,java的中文问题一直是一个老大难的问题,这个现象可以在csdn中java论坛里关于中文乱码的提问率就可以了解到,甚至软件巨人IBM专门开辟了一个解决中文问题的专区,作为一个俗人(一直梦想希望想金凯利那样成为一个“冒牌天神”,只是一直没有成功,也许是因为上帝不照顾中国吧),我也为同意的问题困扰,好在今天解决了。

 

    随着我对.net平台的彻底放弃(只是生活所迫,毕竟我还要生活),将原有的资源转到Java平台上来是我当前的一个重要任务之一,说到这里,不得不承认.net对中文问题解决的很好,虽然偶尔也会出现乱码。

 

    问题是这样的,我的box(http://www.ibeyond.org/box/)原来是使用asp.net写的(当时只是为了尝试新的技术),当时为了数据的可移植性我放弃了使用数据库,将全部数据保存为UTF-8编码的文本文件,在.net中读取这种文件秩序只要指定打开文件的编码方式,中文问题就可以避免。但是按照我以前的思维,java中不是这么作的,java中都是先读取后转换的,最后的结果证明我错了,看来经验主意害死人呀。

 

File f=new File((new BoxConfig()).getBaseDir()+"Data\\"+request.getParameter("ID")+".inc");

 

BufferedReader reader = new BufferedReader(new FileReader(f));

 

String line;

 

while((line=reader.readLine())!=null){

 

  strContent+=line;

 

}

 

这是我最初的代码f就是我要读取的UTF-8格式的文本文件,这一天中经过了无数次的尝试,包括new String(strContent.getBytes("UTF-8"))(其中尝试了N种编码转换),System.setProperty("file.encoding","UTF-8")(其中指定了N种编码转换),都失败了,其中甘苦相信各位经历过被程序折磨的各位看官都有所了解,在此略过。终于在Google中无数次查询中得到了一个后来被证明很重要的一条信息“读取文件时指定字符编码”,一语点醒梦中人,.net中不就是这么实现的吗?走了一圈弯路终于解决了这个问题。

 

File f = new File("E:\\eclipse\\workspace\\box\\Data\\2003-3-7-100.inc");

 

InputStreamReader read = new InputStreamReader (new FileInputStream(f),"UTF-8");

 

BufferedReader reader=new BufferedReader(read);

 

String line;

 

while ((line = reader.readLine()) != null) {

 

System.out.println(line);

 

}

 

通过打开文件是指定文件编码的方法把这个问题轻松的解决了。

 

  最后总结一下:java要读取数据流的时候一定要指定数据流的编码方式(至少读取String流的时候要这么作。

 

  你也许可以通过Http://www.ibeyond.org/得到相关信息,你也可以通过csdn@ibeyond.org和我联系。

 

  本文的版权归iBeyond所有,转载时请注明转载出处。

分享到:
评论

相关推荐

    如何使用Java代码获取文件、文件流或字符串的编码方式.zip

    本工程用于研究如何使用Java代码获取文件、文件流或字符串的编码方式 本工程编码方式:UTF-8 开发工具:MyEclipse 参考博客:http://blog.csdn.net/gaohuanjie/article/details/43735891

    读取创建CSV文件并自动解析文件编码方式

    读取与创建CSV文件,根据第三方jar包自动解析文件编码方式,相关jar包与使用说明

    Java判断文本文件编码格式以及读取

    如果很多时候我们没有约定好文件格式,我们就难以读取文件内容,此时,我们就需要一个工具来探测所读文本的编码格式,此工具可以允许用户读取诸如utf-8,gbk,gb2312一类的文件格式。内置了一些常用的探测实现类,...

    不同字符编码集的文件读取

    Unicode、UTF-8格式、Unicode big endian格式的文件读取

    Java自动识别文件字符编码工具类.rar

    Java自动识别文件字符编码工具类 参考博客 https://blog.csdn.net/superbeyone/article/details/103036914 使用方式: String encode = EncodingDetect.getFileEncode(geoJsonFile); log.info("系统检测到文件[ {}...

    Java解决UTF-8的BOM问题

    Java解决UTF-8的BOM问题,使用“UnicodeInputStream”、“UnicodeReader”。

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java读写excel包括utf8转码为可识别汉字gbk

    java读写excel包括utf8转码为可识别汉字gbk,jxl方式读取excel,生成一个新的excel

    java按指定编码写入和读取文件内容的类分享

    主要介绍了java按指定编码写入和读取文件内容的类,需要的朋友可以参考下

    使用 Java 对 Linux 下文件编码格式进行批量转换源代码

    将 字符集编码格式为 GB2312 的文件 test0.java,test1.java,test2.java 放在 /home/defonds/tmp/test 目录下(test0.java,test1.java,test2.java 作者也可以自行随意创建。如何查看 test0.java 的字符集编码格式...

    java读取解析DXF文件信息.rar

    java解析DXF文件信息,这里涉及到各种转换字符串编码的操作,解决了解析过程中遇到中文的乱码问题,包括circle,ellipse,line,lwpolyline等,还涉及到从DXF文件中读取一个字符串、判断CIRCLE实体、判断ellipse实体、...

    用Java读取Word文档

    用Java读取Word文档

    Huffman编码的java实现

    自己实现的Huffman编码,压缩率接近50%,使用字节流写入文件。解码时读取字节流,将字节流转化为二进制串,匹配字符解压。使用I have a dream作为测试文件。

    Java输出GB2312字符集内容

    该源码用来输出GB2312字符集内容到指定文件,在学习字符编码时对具体字符范围不太熟悉的朋友可以看一下

    Java文件读写操作函数实现

    如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。 * * 构造方法: * * InputStreamReader isr = new InputStreamReader(InputStream * in);//构造一个默认编码集的InputStreamReader类 ...

    eclipse文件编码设置、转换原理与实用工具

    批量指定文件的编码pageEncoding,免除逐个文件点右键、属性、改文本文件编码的繁琐,可灵活指定哪些目录下什么类型的文件用什么编码(一组设置里面可以有多个目录、文件类型),允许多组设置重叠覆盖,带来更多灵活...

    java面试题大全--java基础,struts,spring,ejb等

    3.在JSP中如何读取客户端的请求,如何访问CGI变量,如何确定某个Jsp文件的真实路径。 4.描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。 5.列出Jsp中包含外部文件的方式,两者有何区别。 6....

    java 编写文件上传类简单易用

    使用 FileOutputStream 将 buffer 写入指定文件。 代码清单 // ReceiveServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; //示例程序:记录下Form提交上来的数据,并存储到...

    Java 从网络中读取图片 转换成Base64字符串

    Java 从网络中读取图片 转换成Base64字符串

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

Global site tag (gtag.js) - Google Analytics