我正在使用:
InputStreamReader isr = new InputStreamReader(fis, "UTF8");
从文本文件中读取字符并将其转换为UTF8字符。
我的问题是,如果被读取的一个字符无法转换为utf8,会发生什么?会有例外吗?或者会让角色掉线?
答案 0 :(得分:7)
您没有从一个字符集转换为另一个字符集。您只是指示该文件是UTF 8编码的,以便您可以正确读取它。
如果您想从1编码转换为另一种编码,那么您应该执行以下操作
File infile = new File("x-utf8.txt");
File outfile = new File("x-utf16.txt");
String fromEncoding="UTF-8";
String toEncoding="UTF-16";
Reader in = new InputStreamReader(new FileInputStream(infile), fromEncoding);
Writer out = new OutputStreamWriter(new FileOutputStream(outfile), toEncoding);
在完成David Gelhar的回复后,我觉得这段代码可以改进一下。如果你不知道“inFile”的编码,那么使用GuessEncoding库检测编码,然后用检测到的编码构建阅读器。
答案 1 :(得分:3)
如果输入文件包含无效的字节utf-8,则read()将默认使用U + FFFD(十进制65533; Unicode "replacement character")替换无效字符。
如果您需要更好地控制此行为,可以使用:
InputStreamReader(InputStream in, CharsetDecoder dec)
并根据您的喜好提供CharsetDecoder
。