BufferedReader返回ISO-8859-15字符串 - 如何转换为UTF16字符串?

时间:2009-07-01 15:46:45

标签: java character-encoding

我有一个FTP客户端类,它返回指向文件的InputStream。我想用BufferedReader逐行读取文件。问题是,客户端以二进制模式返回文件,文件具有ISO-8859-15编码。

4 个答案:

答案 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"))
...