我现在正在处理 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的概念?我尝试了不同类型的编码,但似乎不起作用:)
最佳答案
您的文件实际上是 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());
关于java - Android UTF-8 编码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49520409/