java 中文乱码问题
1.要记住的事实
java的class文件是utf-8编码的,jvm使用utf-16,而java的字符串使用unicode编码
2.java支持的字符集
java支持的字符集可以通过java.nio.charset.Charset类查看到
1 for(String key:Charset.availableCharsets().keySet()){ 2 System.out.println(key); 3 }
3.文件读取中的坑
a.读取外部文件
如果没注意外部文件的编码格式,我们的代码也没做处理的话,当默认的编码格式与文件的编码格式不一致时,就会出现中文乱码
1 InputStreamReader in1 = new InputStreamReader(new FileInputStream("a.txt")); 2 InputStreamReader in2 = new InputStreamReader(new FileInputStream("a.txt"), "UTF-8");
这里的in1就会采用当前环境默认的编码格式去读取a.txt,而in2指定使用UTF-8去读取a.txt,清楚外部文件的编码格式比较重要(约定大于配置:-))
获取环境默认的编码
1 System.out.println(Charset.defaultCharset());
win中一般系统默认的是GBK,IDE中是UTF-8
b.字符串与字节数组
常见转换方式是
1 "test".getBytes();
实际上等价于
1 "test".getBytes(Charset.defaultCharset());
字节数组到字符串
1 new String("test".getBytes(Charset.defaultCharset()));
c.字符串迷局
1 new String(input.getBytes("ISO-8859-1"),"Big5");
说法1:把input字符串从ISO-8859-1编码方式转换成Big5编码方式
说法2:我以为你给我的是Big5,你却给我ISO-8859-1,而系统只认识unicode
4.如何跳过坑
处理字符串及文件读写时,时刻清楚:字符串编码(unicode)、环境编码(UTF-8?GBK?)、外部文件编码
自动检测文件编码:http://www.iteye.com/topic/108540
==========================================================
踏踏实实做事,健健康康生活=========================================================
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步