将已知编码的文件转换为UTF-8

4
我需要将文本文件转换为字符串,并将其作为输入参数(InputStream类型)放入IFile.create(Eclipse)中。 我正在寻找示例或如何实现此操作,但仍然无法弄清楚...需要您的帮助! 仅供测试,我尝试使用以下代码将原始文本文件转换为UTF-8编码。
FileInputStream fis = new FileInputStream(FilePath);
InputStreamReader isr = new InputStreamReader(fis);

Reader in = new BufferedReader(isr);
StringBuffer buffer = new StringBuffer();

int ch;
while ((ch = in.read()) > -1) {
    buffer.append((char)ch);
}
in.close();


FileOutputStream fos = new FileOutputStream(FilePath+".test.txt");
Writer out = new OutputStreamWriter(fos, "UTF8");
out.write(buffer.toString());
out.close();

但是即使最终的*.test.txt文件采用UTF-8编码,其中的字符仍然是损坏的。


顺便问一下,你是在写Eclipse插件吗?为什么要使用IFile - Matt Ball
是的,这是一个Eclipse插件! - JackBauer
1个回答

9
您需要使用Charset参数指定InputStreamReader的编码。
                                    // ↓ whatever the input's encoding is
Charset inputCharset = Charset.forName("ISO-8859-1");
InputStreamReader isr = new InputStreamReader(fis, inputCharset));

这也可以运行:
InputStreamReader isr = new InputStreamReader(fis, "ISO-8859-1"));

请参见:

我在SO搜索中找到了所有这些链接:https://stackoverflow.com/search?q=java+detect+encoding


您可以通过Charset.defaultCharset()获取默认字符集-它来自JVM运行的系统。


谢谢您的回复,但我正在从isr (isr.getEncoding())中获取编码,不是它已经知道编码是什么了吗? - JackBauer
我明白了,谢谢!那么,最好的设置 Charset.forName("ISO-8859-1"); 的方法是什么,而不需要硬编码呢?假设文本文件是在同一台电脑上创建的。 - JackBauer
@Jack:如果文本文件是在同一台电脑上使用默认字符集创建的,那么就不需要传入非默认字符集。 - Matt Ball
2
@Jack:嘿,我以为你说文件的编码已知。怎么回事?:P - Matt Ball
2
推荐阅读这篇文章:http://www.joelonsoftware.com/articles/Unicode.html,特别是对于我自己! - JackBauer
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接