Java读取中文的乱码问题
来源:互联网 发布:coc蓝胖升级数据 编辑:程序博客网 时间:2024/06/13 21:30
最近在解析一堆文件,有gbk的,有UTF-8的,处理过程中碰到了乱码问题,相信很多做过相关工作的人都有类似经历。
和中文编码相关的有几个地方:
1. 原始文件的编码(Input的编码)
2. 希望输出的编码(Output的编码)
3. Eclipse的默认字符集编码 (项目->右键Properties->Text file encoding)
文件本质上是一个字节流:
file: Byte1 Byte2 Byte3 Byte4 Byte5 ....
但是Java中的String的基本单元是Char:
String: Char1 Char2 Char3 Char4 ....
所以在Java读取文件的时候,存在着一个将Byte转换成Char的过程:
(Byte1 Byte2) (Byte3) (Byte4 Byte5) ....
Char1 Char2 Char3 ...
从Byte到Char的转变是需要用到字符集编码的。
默认情况下,采用Eclipse的默认字符集将Bytes转变为Char。
如果原始文件的编码是GBK,但是Eclipse的默认字符集是UTF-8。那么在读取文件的时候就会用错误的字符集进行编码,这就是出现中文乱码的原因。
解决办法是在创建Reader的时候指定字符集编码,比如:
假设读入文件的字符集编码是GBK,那么:
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "gbk");
BufferedReader reader = new BufferedReader(isr);
String line = reader.readLine();
这样,line就是正确的按照GBK编码后的字符串。
如果希望将GBK编码的line以UTF-8的形式写入到文件中,可以:
OutputStreamWriter osr = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8");
BufferedWriter writer = new BufferedWriter(osr);
//.....
writer.write(line);
***************************** 我是分割线**************************************
补充一个很好的Link,关于Java的中文编码:
http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/index.html
- Java读取中文的乱码问题
- Java读取properties文件中文乱码问题的解决
- Java 解决FileInputStream读取中文时乱码的问题
- 解决Java读取properties文件中文乱码的问题
- Java读取文件 解决中文乱码问题
- Java IO读取文件中文乱码问题
- java读取mysql数据库中文乱码问题
- Java读取文本文件中文乱码问题
- java读取txt文本中文乱码问题
- Java读取文本文件中文乱码问题
- java读取文件中文乱码问题
- Java 读取xml文件中文乱码问题
- java读取access中文乱码问题
- java 读取中文文件乱码问题
- Java读取properties文件 中文乱码问题
- Java读取文本文件中文乱码问题
- Java IO读取文件中文乱码问题
- Java读取文本文件中文乱码问题
- WAS 6.1命令行(静默)安装
- [转]重构:企鹅1M Web化客户端是怎样炼成的?
- 主账号处理
- 职场里的一些话
- 改变tobhost 高度
- Java读取中文的乱码问题
- 每天写出好代码的5个建议
- 计算机英语整理
- Java5 java6 新特性
- malloc/free 和 new /delete 的区别(转自 forestassure 的 Blog)
- 【算法】二叉树遍历(递归:前序、中序、后序)
- android 应用程序实现开机自启动
- PostgreSQL study
- GridView内按钮Click获取记录主键值