如何在Android上读写UTF-8到磁盘?

时间:2010-04-29 07:00:14

标签: java android utf-8 character-encoding

我无法使用Android API示例中显示的标准InputStreamReader方法将扩展字符(例如法语重音字符)读写到文本文件中。当我使用以下方式回读文件时:

InputStreamReader tmp = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(tmp);
String str;
while ((str = reader.readLine()) != null) {
...

字符串读取在扩展字符处被截断,而不是在行尾。然后字符串的后半部分出现在下一行。我假设我需要将我的数据保存为UTF-8,但我找不到任何示例,而且我是Java的新手。

有人可以向我提供相关文档的示例或链接吗?

5 个答案:

答案 0 :(得分:26)

非常简单明了。 :)

String filePath = "/sdcard/utf8_file.txt";
String UTF8 = "utf8";
int BUFFER_SIZE = 8192;

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), UTF8),BUFFER_SIZE);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), UTF8),BUFFER_SIZE);

答案 1 :(得分:9)

实例化InputStreamReader时,请使用带有字符集的构造函数。

InputStreamReader tmp = new InputStreamReader(in, "UTF-8");

使用OutputStreamWriter

做类似的事情

我喜欢

public static final Charset UTF8 = Charset.forName("UTF-8");

在我的代码中的某个实用程序类中,以便我可以调用(请参阅Doc中的更多内容)

InputStreamReader tmp = new InputStreamReader(in, MyUtils.UTF8);

并且不必每次都处理UnsupportedEncodingException

答案 2 :(得分:1)

这应该只适用于Android,即使没有明确指定UTF-8,因为默认的字符集 UTF-8。如果你可以重现这个问题,请在这里提出一个可重现的测试用例的错误:

http://code.google.com/p/android/issues/entry

答案 3 :(得分:0)

如果您遇到任何此类问题,请尝试这样做。您必须将EncodeDecode数据导入Base64。这对我有用。如果需要,我可以分享代码。

答案 4 :(得分:0)

通过在Project Explorer中右键单击文件并选择属性来检查文件的编码。如果它不是正确的编码,您在更改后需要重新输入特殊字符,或者至少这是我的经验。