【问题标题】:Android UTF-8 encoding not working?Android UTF-8 编码不起作用?
【发布时间】:2018-03-27 18:50:45
【问题描述】:

我现在正在处理一个 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 encoding utf-8 windows-1252


    【解决方案1】:

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

    【讨论】:

    • 你说的完全正确!谢谢你 :) 我在做了一些研究之后添加了这一行:myOutWriter.write('\ufeff');非常感谢,我一直在摸不着头脑!
    【解决方案2】:

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

    【讨论】:

    • 嗨!是的,当我尝试用 excel 打开它时,它告诉我文件来源是 1252 - 西欧(Windows)
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多