Android UTF-8 编码不起作用?

Android UTF-8 encoding not working?

我现在正在处理 CSV 文件。 在我的程序中,我使用 OutputStreamWriter 将数据写入 csv 文件。

OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut, Charset.forName("UTF-8").newEncoder());

我尝试打印出作者的编码风格,结果如下:

Log.i(TAG, "BODY ENCODING: " + myOutWriter.getEncoding());
Logcat: BODY ENCODING: UTF-8

但是当我尝试在桌面上打开 csv 文件时,它说文件在 windows-1252 中,所以我无法读取我需要的 æøå 字符。

我是不是遗漏了一些明显的东西,还是我不理解 outputStreamWriter 的概念?我尝试了不同类型的编码,但似乎没有用:)

当我尝试在 Excel 中打开时:

您是否尝试在 EXCEL 中打开它?为了 EXCEL 将文件识别为 UTF-8,它需要有 BOM (https://en.wikipedia.org/wiki/Byte_order_mark)

您的文件实际上是 UTF-8 而不是 CP-1252。您的文本 editor/viewer 将其检测为 CP-1251(因为没有 multi-byte 个字符)。您可以通过在文件开头添加字节顺序标记 (BOM) 来帮助您的编辑器。即

static final byte[] UTF8_BOM = {0xEF,0xBB,0xBF};
...
fOut.write(UTF8_BOM);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut, Charset.forName("UTF-8").newEncoder());