2012-03-29 89 views
2

當我運行印刷「 u0000的」在Java中

char c= '\u0000'; 
System.out.println(c); 
在Eclipse

,它打印一個小廣場,這意味着一個空字符。
但它在CLI中運行時打印出'a'。
然後我在其他計算機上運行它,某些打印'a',一些打印空間。

爲什麼會發生這種情況?

我的操作系統是Windows 7 professional-32bit。其他系統是windows xp。
我的Java版本是jdk_1.6.0update12。

+0

什麼是命令提示符的字符編碼? – 2012-03-29 04:11:22

+3

Windows控制檯不能正確處理unicode。重定向到一個文件,它顯示正確的輸出。 – 2012-03-29 04:12:17

+0

如果您使用的是理智的字體(即不是光柵字體),Windows控制檯應該正確顯示Unicode,禁止複雜的腳本。如果您使用Unicode編碼,並且光柵字體顯示轉換爲OEM代碼頁,則它支持Unicode。 – Joey 2012-03-29 05:54:58

回答

2

它不打印對我來說:

public class Mkt { 
public static void main(String[] args) { 
    char c= '\u0000'; 
    System.out.println("-" + c + "-"); 
    } 
} 

$ javac Mkt.java && java Mkt 
-- 

的Ubuntu 11.10的位置:

$ java -version 
java version "1.6.0_26" 
Java(TM) SE Runtime Environment (build 1.6.0_26-b03) 
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode) 

要做的檢查/嘗試:

  • 更改終端窗口
  • 的字體
  • 你試過用你的機器上的其他Java版本嗎?
  • 你的機器和你試過的其他機器有什麼不同嗎?
  • 請嘗試使用Cygwin
  • 嘗試使用其他控制檯模擬器Console
  • 重定向到文件(java Mkt > some_file.txt),看看裏面有什麼,最好帶些十六進制編輯器
  • 做一個小Swing應用程序,並顯示在JTextArea,看它是否顯示相同的
  • 什麼\u0001顯示?
+0

(a)控制檯窗口不是終端窗口。 (b)除了諸如zsnes之類的東西之外,沒有控制檯模擬器 - 您可能正在尋找術語»終端模擬器«,甚至在Windows上會出錯 - 控制檯只是輪詢隱藏的控制檯窗口以進行更改,並將其複製屏幕緩衝區;幾乎沒有魔法,幾乎沒有什麼模仿。 (c)順便說一句,重定向到文件會繼承Windows控制檯的相同特性。 – Joey 2012-03-29 05:58:03

+0

我hava檢查,當我改變字體,它顯示了一個空間。重定向到一個文件,它顯示了一個小方塊。所以我認爲原因是Windows控制檯不能正確處理unicode – user1298336 2012-03-29 14:14:50