【问题标题】:Change encoding of existing file with Java?用Java更改现有文件的编码?
【发布时间】:2012-04-10 17:06:54
【问题描述】:

我需要以编程方式将一组 *nix 脚本的编码从 Java 更改为 UTF-8。我不会给他们写任何东西,所以我试图找到最简单|最快的方法来做到这一点。文件不是太多,也不是那么大。我可以:

  • 使用设置为编码的 UTF-8 的 OutputStream“写入”一个空字符串
  • 由于我已经在使用 FileUtils(来自 Apache Commons),我可以读取|写入这些文件的内容,将 UTF-8 作为编码传递

没什么大不了的,但是以前有人遇到过这种情况吗?这两种方法有什么缺点吗?

【问题讨论】:

  • 必须读取和重写整个文件,除非是不需要初始 BOM 的普通 7 位干净 ASCII 文件(等)。 BOM 将转换流以及任何编码更改。
  • 但是我相信 Unix 的默认编码是 UTF-8。你的脚本的编码是什么。
  • @user384706 也许说非 BOM 流被许多“文本”应用程序视为 UTF-8 更合适......“默认编码”更适合在关系中谈论到特定的语言/库/API。
  • 脚本随 ISO-8859-1 一起提供。 @pst 感谢您澄清选项 1 不是一个选项 :)
  • @pst 插入答案,以便我们可以将其从未回答列表中删除

标签: java file encoding


【解决方案1】:

根据要求,由于您使用的是 commons io,因此这里是示例代码(错误检查随风):

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;

public class Main {
    public static void main(String[] args) throws IOException {
        String filename = args[0];
        File file = new File(filename);
        String content = FileUtils.readFileToString(file, "ISO8859_1");
        FileUtils.write(file, content, "UTF-8");
    }
}

【讨论】:

  • UTF-8有必要吗?我认为Java的默认编码是UTF-8反正
  • 这里有几件事要说。首先,默认值不太可能是 utf8,其次,因为这段代码都是关于编码的,所以最好是明确的。 stackoverflow.com/questions/1006276/…
  • 警告:由于某种原因,这会剪切超过几 KB 的文件,实际上是删除超过某个点的文件内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 2014-11-03
相关资源
最近更新 更多