Android UTF-8 encoding not working?

2019-08-19 02:25发布

I am working with a CSV file right now. In my program i am using an OutputStreamWriter to write data the csv file.

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

I tried printing out the encoding style of this writer and get the following:

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

But when i try to open the csv file on my desktop it says that the file is in windows-1252 so i cant read æøå chars which i need.

Am i missing something obvious here or am i not understanding the concept of outputStreamWriter? I have tried different types of encoding, but it doesn't seem to work :)

When i try to open in Excel: FilOprindelse = File Origin

2条回答
混吃等死
2楼-- · 2019-08-19 02:58

Your file is actually UTF-8 not CP-1252. Your text editor/viewer detected it as CP-1251 (since no multi-byte characters). You can help your editor by adding byte order mark (BOM) in the beginning of the file. I.e.

static final byte[] UTF8_BOM = {0xEF,0xBB,0xBF};
...
fOut.write(UTF8_BOM);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut, Charset.forName("UTF-8").newEncoder());
查看更多
霸刀☆藐视天下
3楼-- · 2019-08-19 03:11

Did you try opening it in EXCEL? For EXCEL to recognize the file as UTF-8 it needs to have BOM (https://en.wikipedia.org/wiki/Byte_order_mark)

查看更多
登录 后发表回答