我有一個FTP客戶端類,它返回指向文件的InputStream。我想用BufferedReader逐行讀取文件。問題是,客戶端以二進制模式返回文件,並且該文件具有ISO-8859-15編碼。BufferedReader返回ISO-8859-15字符串 - 如何轉換爲UTF16字符串?
回答
如果文件/流/無論真正包含ISO-8859-15編碼文本,您只需指定創建InputStreamReader時:
BufferedReader br = new BufferedReader(
new InputStreamReader(ftp.getInputStream(), "ISO-8859-15"));
Then readLine()
將在Java的本地編碼(UTF-16,而不是UTF-8)中創建有效的字符串。
原始字符串在ISO-8859-15中,所以由您的InputStreamReader讀取的字節流將採用此編碼。所以請閱讀使用該編碼(在InputStreamReader構造函數中指定)。這告訴InputStreamReader傳入的字節流在ISO-8859-15中並執行適當的字節到字符轉換。
現在它將採用標準的Java UTF-16格式,然後您可以按照自己的意願進行操作。
我認爲目前的問題是,您正在使用您的默認編碼(通過在InputStreamReader中未指定編碼)讀取它,然後嘗試轉換它,屆時它爲時已晚。
對這些類使用默認行爲往往以悲傷告終。這是哪裏,你可以指定編碼,和/或通過默認情況下,VM編碼是個好主意-Dfile.encoding
Downvoted爲什麼? – 2013-02-08 16:00:11
一定是一個錯位,對不起,它爲時已晚,以致無法撤消:( – Kieran 2013-02-11 08:38:49
你試過:
BufferedReader r = new BufferedReader(new InputStreamReader("ISO-8859-1"))
...
試試這個:
BufferedReader br = new BufferedReader(
new InputStreamReader(
ftp.getInputStream(),
Charset.forName("ISO-8859-15")
)
);
String row = br.readLine();
- 1. 將響應字符串轉換爲utf16
- 2. 將字符串ArrayList轉換爲BufferedReader
- 3. 將字符串轉換爲Double然後返回字符串
- 4. 字符串和UTF16
- 5. UTF16字符串轉爲正常文本
- 6. 如何將UTF8字符串轉換爲UTF16
- 7. readLine()方法返回空字符串,BufferedReader
- 8. 將一個UTF8字符串轉換爲一個UTF16字符串在c + +
- 9. 的ArrayList轉換爲字符串,並轉換字符串返回到ArrayList的
- 10. 如何將字符串的字符串轉換爲字符?
- 11. 將ASCII字符串轉換爲USB UTF16字符串格式表示爲使用shell命令的shell字符串
- 12. 將字符串轉換爲字符指針返回空字符串
- 13. 將字符串轉換爲字符串
- 14. 將字符串轉換爲字符串
- 15. 將字符串轉換爲字符串
- 16. 如何將字符串轉換爲字節數組並返回
- 17. VB.NET - 將字符串轉換爲雙精度字符並返回
- 18. 如何輕鬆將BufferedReader轉換爲字符串?
- 19. 如何將字符串文字轉換爲字符串值
- 20. 轉換字符串[字符串:任何]
- 21. TO_char將數字轉換爲字符串後返回斜槓值字符串
- 22. 轉換數字字符串轉換爲字符串
- 23. 如何將JTextField轉換爲字符串和字符串爲JTextField?
- 24. 如何爲BufferedReader使用JOptionPane字符串?
- 25. 將字符串轉換爲int,int轉換爲字符串
- 26. 雙轉換到字符串返回
- 27. 轉換此字符串返回雙重
- 28. 轉換功能,putStrLn'd返回字符串
- 29. 字符串的JSONObject轉換返回null
- 30. PHP轉換(整數)返回字符串
我看不出UTF-8在這裏如何介入 - Java在內部使用UTF-16,而不是UTF-8。 – 2009-07-01 16:01:53
對不起,應該說UTF-16。固定。 – tputkonen 2009-07-02 00:05:59