【问题标题】:Android OutputStreamWriter writes non-UTF-8 charactersAndroid OutputStreamWriter 写入非 UTF-8 字符
【发布时间】:2016-12-25 00:25:12
【问题描述】:

我的代码发生了一些奇怪的事情。我正在尝试打开一个文件并将生成的字符串(基于时间)附加到它,以便以后可以使用它。在我的应用程序中,这种情况不止一次发生,但不知何故,这一次它并没有给我想要看到的结果。澄清一下:

我在课堂上使用以下代码:

try {
    OutputStreamWriter oos = new OutputStreamWriter(context.openFileOutput(ARRANGED_TXT, Context.MODE_PRIVATE));

    oos.write(ArrangedTxtAsString);

    oos.close();
}
catch(FileNotFoundException e){
    Log.e("File Error", "File not found: " + e.toString());
}

ARRANGED_TXT 被定义为:

private static final String ARRANGED_TXT = "arranged_txt.txt";

ArrangedTxtAsString 是一个字符串,如下所示:

Banana
Pineapple
Orange
Coconut
Strawberry

它是使用 StringBuilder 制作的。

现在的问题是,生成的文件是这样的:

NotePad++ 没有问题,因为其他程序给出了相同的结果。需要提到的一件重要的事情是,尽管文本看起来像是由非 UTF-8 字符组成的,但它可以由程序的其余部分完美处理。这听起来可能有点奇怪,但我想说的是,代码工作正常,但唯一的问题是,通过文本编辑器显示的文本与它应该显示的文本不符看起来像。你看,我是一个完美主义者,这就是为什么我希望它得到修复。这也可能是未来的问题(调试目的等)。

编辑:

似乎字符串包含什么并不重要:单个字符、数字或其他任何内容;它给出了完全相同的结果。即使是写"" 也会导致那些奇怪的字符!

我真的希望有人知道这里发生了什么! 提前谢谢你。

【问题讨论】:

  • 你的意思是oos.write(ArrangedTxtAsString.toString());
  • ArrangedTxtAsString 应该已经是一个字符串,因为它被定义为ArrangedTxtAsString = stringBuilder.toString();,其中stringBuilder 只是StringBuilder 的一个实例。知道这一点,这也行不通也就不足为奇了。无论如何,我真的很感谢你的帮助! ;)
  • OutputStreamWriter 不太适合输出文本,您应该改用BufferedWriter

标签: java android utf-8 fileoutputstream


【解决方案1】:

如果您需要编写 UTF-8,必须使用带有字符集的构造函数,例如:

OutputStreamWriter oos = new OutputStreamWriter(context.openFileOutput(ARRANGED_TXT, Context.MODE_PRIVATE),"UTF-8");

OutputStreamWriter(OutputStream out, String charsetName)

否则使用默认编码而不是所有系统中的utf-8

【讨论】:

  • 恐怕这也不起作用:我得到完全相同的字符。不过,感谢您的宝贵时间! :)
猜你喜欢
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 2011-09-30
  • 2011-04-04
  • 2017-06-18
  • 1970-01-01
  • 2023-03-18
  • 2016-02-17
相关资源
最近更新 更多