我无法使用Android API示例中显示的标准InputStreamReader方法将扩展字符(例如法语重音字符)读写到文本文件中。当我使用以下方式回读文件时:
InputStreamReader tmp = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(tmp);
String str;
while ((str = reader.readLine()) != null) {
...
字符串读取在扩展字符处被截断,而不是在行尾。然后字符串的后半部分出现在下一行。我假设我需要将我的数据保存为UTF-8,但我找不到任何示例,而且我是Java的新手。
有人可以向我提供相关文档的示例或链接吗?
答案 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。如果你可以重现这个问题,请在这里提出一个可重现的测试用例的错误:
答案 3 :(得分:0)
如果您遇到任何此类问题,请尝试这样做。您必须将Encode
和Decode
数据导入Base64
。这对我有用。如果需要,我可以分享代码。
答案 4 :(得分:0)
通过在Project Explorer中右键单击文件并选择属性来检查文件的编码。如果它不是正确的编码,您在更改后需要重新输入特殊字符,或者至少这是我的经验。