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

Rob*_*ent 9 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) {
...
Run Code Online (Sandbox Code Playgroud)

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

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

yan*_*nko 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);
Run Code Online (Sandbox Code Playgroud)

  • 是.你可以用Android的`openFileOutput(..)`替换通用的`new FileOutputStream(filePath)`. (4认同)

its*_*dok 9

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

InputStreamReader tmp = new InputStreamReader(in, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

和做类似的事情 OutputStreamWriter

我喜欢有一个

public static final Charset UTF8 = Charset.forName("UTF-8");
Run Code Online (Sandbox Code Playgroud)

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

InputStreamReader tmp = new InputStreamReader(in, MyUtils.UTF8);
Run Code Online (Sandbox Code Playgroud)

而不必UnsupportedEncodingException每次都处理.