2014-03-19 16 views
0

我要求幫助,在這this problem,當我想從字節表Java的日食 - 字符串包裝爲的System.out.println()

`[0, 0, 0, 0, 0, 0, 0, 0, 122, 98, 117, 54, 46, 0, 0, 115, 122, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 121, 116, 117, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 107, 111, 98, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 42, 109, 111, 119, 40, 0, 0, 0, 0, 0, 0, 107, 111, 98, 0, 0, 0, 0, 0, 98, 111, 40]` 

轉換成字符,打印此字符。當我製作時:

for(byte b: byteArray){ 
     System.out.print((char) b); 
    } 

我的控制檯上沒有任何東西。即使滾動條也是一樣的長度。 但是,當我做:

for(byte b: byteArray){ 
System.out.println((char) b); 
} 

它的工作良好。 我認爲這是eclipse問題,而不是代碼。我沒有選中限制控制檯輸出,但沒有幫助。

+2

你都知道,某些編碼是不是一個字節每字符,對不對?你使用什麼編碼,爲什麼不使用'String(byte [],Charset)'構造函數? – fge

+0

'System.out.print(new String(byteArray));' –

+0

如何使用ASCII編碼 – Rop

回答

0

我會盡量排除非打印字符,如0

for(byte b: byteArray){ 
    System.out.print(b >= 32 ? (char) b : ""); 
} 

您可以替換爲任何你需要爲空字符串「?」或 「[ascii_code]」 ......

我已經使用您的數據測試,並在我的Eclipse(OSX)出現在這兩種情況下,我的代碼:

public static void main(String[] args) { 
    byte[] bytes = 
     { 0, 0, 0, 0, 0, 0, 0, 0, 122, 98, 117, 54, 46, 0, 0, 115, 122, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 121, 116, 117, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 107, 111, 98, 105, 0, 0, 0, 0, 
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 0, 0, 0, 0, 0, 0, 122, 42, 109, 111, 119, 40, 0, 0, 0, 0, 0, 0, 107, 111, 98, 0, 0, 0, 0, 0, 98, 111, 40 }; 
    System.out.println("Init..."); 
    for (byte b : bytes) { 
     System.out.print((char) b); 
    } 
    System.out.println(); 
    System.out.println(); 
    for (byte b : bytes) { 
     System.out.print(b >= 32 ? (char) b : "?"); 
    } 
    System.out.println(); 
    System.out.println("End"); 
} 

的輸出是:

Init... 
zbu6.sz*tytul kobiz*mow(kobbo(

????????zbu6.??sz*???????????tytul?????????????????????? kobi????????????????????????????????????????????????????????????????????????????????????z*mow(??????kob?????bo(
End 
0

字符爲2個字節,如果字節數超出範圍-128到127,

0

嘗試做

for(byte b: byteArray){ 
    System.out.print((char) b); 
} 
System.out.println(); 

print可以被緩衝,而不是方法顯示,而你不打印\n

0

的問題是在您的環境肯定。

我的日食控制檯輸出這與你的第一個循環:

enter image description here

有趣的事情,我不能複製/粘貼此輸出。我認爲它是\ 0字節錯誤。

0

控制檯對於經常用作a string terminatornull character\u0000反應不佳。

Eclipse使用的SWT經常在可能的情況下使用本機控件,因此可能存在底層UI工具包或SWT使用它的缺陷。

之前已經報告過 - Bug 362957 - The Console does not display '\u0000' correctly - 因此您可能希望將您的輸入添加到錯誤報告中並對其進行投票。

我將包括:

  • 操作系統/版本
  • Eclipse和SWT構建版本(看在plugins目錄)
    • 如有您對樣式表所做的任何更改(例如, e4_default_gtk.css)
  • 平臺UI工具包的版本,如果適用(例如:GTK)
  • 字體 - see Preferences
  • Java版本(可能是無關緊要的)