Java 中文乱码原因及解决方案
乱码原因
- 字符编码不一致,在读取或显示数据时,如果读取端或显示端的字符编码与数据的实际编码不一致,就会导致乱码。
- 缺乏字符集支持:Java标准库的一些早期版本可能不支持某些字符集,导致无法正确解析某些特殊字符,从而产生乱码。
- 系统环境设置不正确:Java虚拟机(JVM)通过系统属性来确定默认的字符编码。如果系统环境的字符编码设置不正确且未显示指定编码格式,也会导致中文乱码问题。
解决方案
- 统一字符编码:确保所有涉及到中文数据的部分都使用相同的字符编码。建议直接使用 UTF-8 编码。
读写文件时,指定编码
import java.io.*;
public class CharsetExample {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("input.txt"), "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.txt"), "UTF-8"));
writer.write("卧槽,你个der!");
writer.close();
}
}
创建字符串时,指定编码
String str = new String("卧槽,你个der!", "UTF-8");
设置系统环境字符编码
System.setProperty("file.encoding", "UTF-8");