我现在正在处理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中打开时:
java - Android UTF-8编码不起作用?-LMLPHP

最佳答案

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

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

07-26 02:02