IDE:eclipse Helios Service Release 2
Console預設字集: UTF-8
串流輸入預設編碼: UTF8
串流輸出預設編碼: UTF8
問題 :console所輸入的中文字串,無法正確的顯示回console,尚未使用CMD測試
1. 外部已編輯好的UTF8編碼文字檔,可以正確讀出顯示在console
2. 程式內給予初值的字串,可以正確顯示
3. console取得的字串,無法正確的存入外部文字檔,文字檔內容為亂碼
4. 以MS950編碼取得亂碼的位元組,在強制編成UTF8,部分文字可正確顯示
System.out.println("系統預設編碼: "+Charset.defaultCharset());
BufferedReader reader=null;
InputStreamReader stream =new InputStreamReader(System.in);
reader = new BufferedReader(stream);
System.out.println("串流預設編碼: "+stream.getEncoding());
byte[] binary=null;
String str =null;
System.out.println(str = reader.readLine());
reader.close();
binary = str.getBytes("UTF-16");
System.out.println(new String(binary,"UTF-16"));
System.out.printf("UTF-16: ") ;
for(byte b:binary){
System.out.print(Integer.toHexString(b & 0x00ff) + " ");
}
System.out.println();
binary = str.getBytes("UTF-8");
System.out.println(new String(binary,"UTF-8"));
System.out.printf("UTF-8: ");
for(byte b:binary){
System.out.print(Integer.toHexString(b & 0x00ff) + " ");
}
System.out.println();
binary = str.getBytes("MS950");
System.out.println(new String(binary,"MS950"));
System.out.printf("MS950: ");
for(byte b:binary){
System.out.print(Integer.toHexString(b & 0x00ff) + " ");
}
//某些字串可以用ms950編碼正確顯示
System.out.println();
binary = str.getBytes("MS950");
System.out.println(new String(binary,"UTF8"));
for(byte b:binary){
System.out.print(Integer.toHexString(b & 0x00ff) + " ");
}
System.out.println();
//用全部編碼比對
for (String encoding : Charset.availableCharsets().keySet()) {
try{
binary = str.getBytes(encoding);
System.out.printf("%s %s%n",
encoding, new String(binary, "utf8"));
}catch (Exception e) {
continue;
}
}
沒有留言:
張貼留言