2012-09-09 145 views
0

我試圖讀取由C#程序創建的Java(android)中的二進制文件,但是我偶然發現了一個問題。 C#默認使用UTF-7編碼二進制文件中的字符串,Java使用UTF-8。這當然意味着字符串不能正確加載。從二進制文件讀取字符串,不同的編碼

我想知道如何讀取字符串爲UTF-7而不是UTF-8。我也注意到,我遇到了類似的花車問題。 C#和Java處理它們的方式是否不同?如果是這樣,我如何在Java中正確讀取它。

編輯:我在C#程序中使用BinaryWriter類,在java中使用DataInputStream類。

+1

呃,你在問什麼?一些代碼或與我們分享的東西,以使您的問題更具體一點? –

回答

1

除非另有說明,C#使用UTF-8編碼。

編輯這裏的文檔不正確。
查看源,BinaryWriter寫入字符串長度爲7位編碼的整數,使用下面的代碼:

protected void Write7BitEncodedInt(int value) { 
     // Write out an int 7 bits at a time. The high bit of the byte, 
     // when on, tells reader to continue reading more bytes. 
     uint v = (uint) value; // support negative numbers 
     while (v >= 0x80) { 
      Write((byte) (v | 0x80)); 
      v >>= 7; 
     } 
     Write((byte)v); 
    } 

您需要的端口這個代碼的Java,以找出有多少要讀取的字節。

+0

根據文件它是UTF-7 http://msdn.microsoft.com/en-us/library/yzxa6408.aspx – Frozendragon

+3

@Frozendragon:錯了。它將冗長的作爲一個用UTF7編碼的整數寫入,然後使用作者的編碼寫入字符串。 (默認情況下是UTF8) – SLaks

+0

這不會影響Javascript將它作爲UTF-8編碼字符串讀取的能力嗎? – Frozendragon

相關問題