我有一个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. 将一个UTF8字符串转换为一个UTF16字符串在c + +
- 6. 的ArrayList转换为字符串,并转换字符串返回到ArrayList的
- 7. 如何将字符串的字符串转换为字符?
- 8. 将ASCII字符串转换为USB UTF16字符串格式表示为使用shell命令的shell字符串
- 9. 将字符串转换为字符串
- 10. VB.NET - 将字符串转换为双精度字符并返回
- 11. 如何轻松将BufferedReader转换为字符串?
- 12. 如何将字符串文字转换为字符串值
- 13. 转换字符串[字符串:任何]
- 14. 转换数字字符串转换为字符串
- 15. 如何将JTextField转换为字符串和字符串为JTextField?
- 16. 如何为BufferedReader使用JOptionPane字符串?
- 17. 转换此字符串返回双重
- 18. 字符串的JSONObject转换返回null
- 19. PHP转换(整数)返回字符串
- 20. 转换功能,putStrLn'd返回字符串
- 21. 分割字符串转换成字符,然后返回字符串
- 22. 将单字节转换为字符串并返回字节
- 23. 如何将字符串转换为HTML友好的字符串
- 24. Java:如何将ASCII字符串转换为字符串?
- 25. 如何将utf8字符串转换为ascii字符串?
- 26. 如何将[]字符串转换为...字符串
- 27. 如何将字符串转换为字符串[] // Android开发// Java
- 28. 如何将LPCSTR字符串转换为LPCTSTR字符串?
- 29. 如何将“字符串选项”转换为“字符串”?
- 30. 如何将字符串数组转换为字符串?
我看不出UTF-8在这里如何介入 - Java在内部使用UTF-16,而不是UTF-8。 – 2009-07-01 16:01:53
对不起,应该说UTF-16。固定。 – tputkonen 2009-07-02 00:05:59