我有一个FTP客户端类,它返回指向文件的InputStream。我想用BufferedReader逐行读取文件。问题是,客户端以二进制模式返回文件,文件具有ISO-8859-15编码。
答案 0 :(得分:21)
如果文件/流/无论真正包含ISO-8859-15编码文本,您只需在创建InputStreamReader时指定:
BufferedReader br = new BufferedReader(
new InputStreamReader(ftp.getInputStream(), "ISO-8859-15"));
然后readLine()
将使用Java的本机编码(UTF-16,而不是UTF-8)创建有效的字符串。
答案 1 :(得分:9)
试试这个:
BufferedReader br = new BufferedReader(
new InputStreamReader(
ftp.getInputStream(),
Charset.forName("ISO-8859-15")
)
);
String row = br.readLine();
答案 2 :(得分:1)
原始字符串在ISO-8859-15中,因此InputStreamReader读取的字节流将采用此编码方式。所以请使用该编码读入(在InputStreamReader构造函数中指定)。这告诉InputStreamReader传入的字节流是在ISO-8859-15中,并执行适当的字节到字符的转换。
现在它将采用标准的Java UTF-16格式,然后您可以按照自己的意愿行事。
我认为当前的问题是你使用默认编码(通过不在InputStreamReader中指定编码)来读取它,然后尝试转换它,到那时为时已晚。
对这些类使用默认行为通常以悲伤结束。最好尽可能指定编码,和/或通过-Dfile.encoding
默认VM编码
答案 3 :(得分:0)
你试过了吗?
BufferedReader r = new BufferedReader(new InputStreamReader("ISO-8859-1"))
...