Android OutputStreamWriter写入非UTF-8字符

时间:2016-12-25 00:25:12

标签: java android utf-8 fileoutputstream

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

我在班上使用以下代码:

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制作的。

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

enter image description here

这不是NotePad ++的问题,因为其他程序会给出相同的结果。值得一提的是,虽然文本看起来像是由非UTF-8字符组成的,但它完全由程序的其余部分处理。这可能听起来有点奇怪,但我想说的是,代码工作正常,但唯一的问题是,通过文本编辑器显示的文本,不应该与它应该的东西相对应看起来像。你知道,我是一个完美主义者,这就是我希望它得到修复的原因。这也可能是未来的问题(调试等)。

修改

似乎字符串包含的内容无关紧要:单个字符,数字或其他内容;它给出了完全相同的结果。即使写""也会产生那些怪异的角色!

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

1 个答案:

答案 0 :(得分:0)

如果你需要编写UTF-8,必须使用带有charset的构造函数,如:

myField.stringValue

OutputStreamWriter(OutputStream out, String charsetName)

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