java中文getbytes为3,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
原文:http://www.cnblogs.com/ikuman/p/3659273.html
總結
以上是生活随笔為你收集整理的java中文getbytes为3,java 中文乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编写时钟aplet程序java,编写时钟
- 下一篇: php 获取所有下周1,用php获取本周