如何将文件读入UTF-8 Java应用程序,其中文件采用不同的字符编码?

时间:2013-01-25 02:31:04

标签: java unicode utf-8

我的应用程序设置为支持存储UTF-8字符编码。我正在读取我从其他各种组织获得的文件,这些文件可能是UTF-8,latin-1,ASCII等。我是否需要做任何特别的事情以确保将具有各种字符编码的文件读入UTF-8格式正确吗?例如我需要弄清楚文件中的字符编码是什么,并明确地将其转换为UTF-8?

或者以下是否足够?

Reader reader = new InputStreamReader(new FileInputStream("c:/file.txt"), "UTF-8");

2 个答案:

答案 0 :(得分:6)

你错了。您没有将读入编码,而是从编码中读取。您作为InputStreamReader的第二个参数提供的编码应该是源流(文件)的预期编码

Reader reader = new InputStreamReader(new FileInputStream("c:/file.txt"), "<encoding_of_file.txt>");

数据在内存中后,始终为UTF-16。当你想写数据时(假设你总是想把它写成UTF-8),那么你将使用:

Writer writer = new OutputStreamWriter(new FileOutputStream("destfile"), "UTF-8");

答案 1 :(得分:2)

您需要告诉读者文件的编码

如果您的输入可以有多种不同的编码,那么您可能会遇到问题:您无法可靠地检测到编码,请参阅How can I detect the encoding/codepage of a text file

如果您想支持不同的编码,您基本上有三个选项:

  • 在某处存储有关编码的信息,例如XML文件中的<?xml version="1.0" encoding="UTF-8" ?>。不幸的是,并非所有文件格式 - 例如“纯文本”文件 - 都有这样的元数据。
  • 使用各种启发式方法“检测”/猜测编码。这可能有时会出错。
  • 询问用户。这是一种糟糕的用户体验,因为大多数用户完全不知道甚至 的编码是什么。