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

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

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

读取的string在扩展字符而不是在行尾截断。 string的后半部分出现在下一行。 我假设我需要坚持我的数据为UTF-8,但我找不到任何这样的例子,我是新来的Java。

任何人都可以提供一个例子或相关文档的链接?

Solutions Collecting From Web of "如何在Android上读写UTF-8到磁盘?"

非常简单直接。 🙂

 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); 

当你实例化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

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

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

如果你遇到任何这样的问题,请尝试这样做。 您必须将数据EncodeDecodeBase64 。 这对我有效。 如果你需要,我可以分享代码。

通过在Project Explorer中右键单击它并select属性来检查文件的编码。 如果它不是正确的编码,你需要在改变它之后重新input你的特殊字符,或者至less这是我的经验。