0

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

还是以下就足够了?

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

4

2 回答 2

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");
于 2013-01-25T02:39:16.080 回答
2

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

如果您的输入可以采用多种不同的编码,那么您可能会遇到问题:您无法可靠地检测到编码,请参阅如何检测文本文件的编码/代码页

当你想支持不同的编码时,你基本上有三种选择:

  • 将有关编码的信息存储在某处,例如<?xml version="1.0" encoding="UTF-8" ?>XML 文件中。不幸的是,并非所有文件格式(例如“纯文本”文件)都具有此类元数据。
  • “检测”/猜测具有各种启发式的编码。这有时可能会出错。
  • 询问用户。这是糟糕的用户体验,因为大多数用户完全不知道编码什么。
于 2013-01-25T11:19:52.930 回答