Java Android UTF-8编码不工作?

Java Android UTF-8编码不工作?,java,android,encoding,utf-8,windows-1252,Java,Android,Encoding,Utf 8,Windows 1252,我现在正在处理CSV文件。 在我的程序中,我使用OutputStreamWriter将数据写入csv文件 OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut, Charset.forName("UTF-8").newEncoder()); 我尝试打印出本文作者的编码样式,得到以下结果: Log.i(TAG, "BODY ENCODING: " + myOutWriter.getEncoding()); Logcat: BOD

我现在正在处理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()

是否尝试在EXCEL中打开它?EXCEL要将文件识别为UTF-8,需要有BOM()

您的文件实际上是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());

您的文件实际上是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());

你好是的,当我尝试用excel打开它时,它告诉我文件的来源是1252-西欧(Windows)嗨!是的,当我尝试用excel打开它时,它告诉我文件的来源是1252-西欧(Windows)你是绝对正确的!谢谢你男人:)我在做了一些研究后添加了这一行:myOutWriter.write('\ufeff');太谢谢你了,我一直在挠头!你完全正确!谢谢你男人:)我在做了一些研究后添加了这一行:myOutWriter.write('\ufeff');太谢谢你了,我一直在挠头!