我的应用程序设置为支持存储 UTF-8 字符编码。我正在阅读从其他各种组织获得的文件,这些文件可能采用 UTF-8、latin-1、ASCII 等格式。我需要做任何特别的事情来确保将具有各种字符编码的文件读入 UTF-8格式正确吗?例如,我是否需要弄清楚文件的字符编码是什么,并将其显式转换为 UTF-8?
还是以下就足够了?
Reader reader = new InputStreamReader(new FileInputStream("c:/file.txt"), "UTF-8");
你错了。您没有读入编码,而是从编码中读取。您作为第二个参数提供的编码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");
你需要告诉读者文件的编码。
如果您的输入可以采用多种不同的编码,那么您可能会遇到问题:您无法可靠地检测到编码,请参阅如何检测文本文件的编码/代码页
当你想支持不同的编码时,你基本上有三种选择:
<?xml version="1.0" encoding="UTF-8" ?>
XML 文件中。不幸的是,并非所有文件格式(例如“纯文本”文件)都具有此类元数据。