我有一個程序我MVN EXEC運行:JAVA(我的主要文件是在UTF-8編碼和我的系統的默認字符集爲Windows-1252)瞭解字符串編碼/解碼的Java
System.out.println(Charset.defaultCharset()); //print windows-1252
String s = "éàè";
System.out.println(new String(s.getBytes(Charset.forName("UTF-8")))); //OK Print éàè
System.out.println(new String(s.getBytes(Charset.forName("windows-1252")))); //Not OK Print ▒▒▒
我不明白爲什麼第一個版畫作品,根據文檔的getBytes 使用給定的charset和由指定使用平臺的默認字符集的字節數組解碼構造一個新的String String構造的字符串編碼成字節序列
所以第一個打印以UTF-8編碼,然後用平臺的默認字符集windows-1252解碼,這怎麼能工作?它無法使用平臺字符集windows-1252解碼編碼的utf-8字節數組。
第二次打印是錯誤的,我不明白爲什麼。由於我的文件是用UTF-8編碼的,而平臺字符集是windows-1252,我的意圖是用windows-1252字符集編碼字符串,所以我調用s.getBytes(Charset.forName(「windows-1252」)),然後創建一個具有先前結果的字符串,但它不起作用
嘗試'PrintStream out = new PrintStream(System.out,true,「windows-1252」); 通過out.println(一個或多個);' – bradimus
作爲旁註,在MS-DOS默認字符集不是1252,請參見此處:https://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding .doc.html – Berger
PrintStream out = new PrintStream(System.out,true,「windows-1252」);不起作用,但PrintStream out = new PrintStream(System.out,true,「utf-8」); –