2011-03-28 126 views
0

我試圖從SD卡上讀取文件,並且我被告知它是unicode格式。但是,當我嘗試閱讀我得到以下文件:Android讀取文件的編碼問題

Encoded file

這是我用來讀取文件的代碼:

InputStreamReader fw = new InputStreamReader(new FileInputStream(root.getAbsolutePath()+"/Drive/sdk/cmd.62.out"), "UTF-8"); 
char[] buf = new char[255];  
fw.read(buf); 
String readString = new String(buf); 
Log.d("courierread",readString);  
fw.close(); 

如果我寫的輸出到文件這是當我用十六進制編輯器打開它時得到的結果: Hex info

有關我需要如何正確讀取文件的想法?

回答

1

該文件是否有byte-order mark?在這種情況下看Reading UTF-8 - BOM marker

編輯(從評論):這看起來像小尾數UTF-16給我。試試字符集「UTF-16LE」。

+0

不確定,但我嘗試應用BOM清除代碼,它似乎使情況變得更糟!我想最簡單的解決方案是去掉所有那些怪異的A字符 - 不幸的是我不知道unicode字符是這樣做的。 – RichW 2011-03-28 10:55:17

+0

刪除這些字符不會解決問題。你確定它是一個UTF-8文件嗎?你可以在十六進制編輯器中查看文件併發佈一個截屏或前幾個字節的十六進制代碼嗎? – RoToRa 2011-03-28 11:04:00

+0

我只知道它是unicode。我試過UTF-16,它完全不可讀,它只是由許多狡猾的角色組成。根據要求,我輸出了每個字符的十六進制代碼(請參閱原始文章)。看起來,每個字符之間有一個0 .. – RichW 2011-03-28 11:17:47

1

您在十六進制編輯器中顯示的文件是而不是UTF-8編碼的,它看起來更像是UTF-16。這意味着您必須在您的代碼中指定UTF-16作爲編碼(可能是UTF-16LE變體)。

如果它是UTF-8編碼的,那麼它將表示所有可用ASCII表示的字符,只用一個字節。

+0

有趣的提示,謝謝你。我會嘗試使用不同類型的編碼創建不同的文件。我想這是瞭解差異的最簡單方法 – RichW 2011-03-28 12:37:14