2015-04-15 32 views
3

我有一個文件,當顯示geanny *顯示UTF-16BE。如果我嘗試將Java中的此文件轉換爲其他編碼(假設爲ISO-8859-1),假設它是UTF-16BE,則每次在新的開始時出現問號(?)創建的文件。如果相反,我認爲它是在UTF-16(這是不正確的),轉換後的文件得到轉換好,沒有任何問號在開始。 有人可以澄清爲什麼這種行爲?java中的UTF-16BE和UTF-16問題

貝婁是從我使用的代碼片段:


    StringBuilder sb = new StringBuilder(); 
    BufferedReader buff = new BufferedReader(new InputStreamReader(inputStream, utf16beCharset)); 
    String line = null; 

    while ((line = buff.readLine()) != null) { 

     sb.append(line); 
     sb.append('\n'); 
    } 

    String output = new String(sb.toString().getBytes(neededCharset), neededCharset); 
    System.out.println(output); 

* geanny是一個文本編輯器

+0

必須是物料清單,這在BE模式下是不期望的(您已經知道它是BE,對吧?)。 – Bram

+0

@Bram如果這不是BE的預期,它爲什麼會出現? – artaxerxe

+0

@artaxerxe BOM不是UTF-16BE編碼的一部分,所以它顯示了一個問號。 – WonderWorld

回答

5

你的問題是BOM(Byte Order Mark)。

如果將字符集定義爲UTF-16,則Java會識別BOM並在讀取後將其刪除。 BOM然後告訴Java字符流是(UTF-16)BE。

如果您定義了UTF-16BE,那麼您告訴Java忽略BOM並且Java忽略它並將其寫入您的目標文件。