Java读取中文的乱码问题
2011-06-30 10:56
176 查看
最近在解析一堆文件,有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
和中文编码相关的有几个地方:
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 IO知识】读取中文乱码问题解决
- Java 解决FileInputStream读取中文时乱码的问题
- JAVA本地读取文件,解决中文乱码问题
- Java读取properties文件中文乱码问题解决
- java读取txt文本中文乱码问题
- 解决Java读取properties文件中文乱码的问题
- Java底层代码实现单文件读取和写入(解决中文乱码问题)
- Java读取文本文件中文乱码问题
- 【JAVA】读取txt文件中文乱码问题
- Java读取文本文件中文乱码问题
- Java读取文本文件中文乱码问题 .转载
- java 向文件中写中文和读取乱码问题
- java读取默认编码是ansi的文本文件时,解决中文乱码问题
- Java读取文本文件中文乱码问题
- java读取txt文本中文乱码问题
- java:InputStream读取文件时出现中文乱码问题
- Java读取properties文件中文乱码问题的解决
- 解决Java读取properties文件中文乱码的问题
- Java读取文本文件中文乱码问题
- 使用java.nio及其子包中的类SocketChanel完成如下功能:读取www.baidu.com等网页的内容,打印到控制台,避免中文乱码问题。