You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中UTF-8编码失效:CSV文件写入后被识别为windows-1252

解决CSV文件UTF-8编码显示异常的问题

嘿,我碰到过不少你这种情况——代码里明明指定了UTF-8写入CSV,日志也显示编码是UTF-8,但用桌面工具打开时却被识别成windows-1252,导致æøå这类特殊字符读不出来。这大概率是两个原因:UTF-8文件没加BOM标记,或者默认打开工具的编码识别逻辑搞事情,下面给你具体的解决办法:

1. 给UTF-8文件添加BOM(最直接的Windows兼容方案)

Windows上的记事本这类工具,默认会把没有BOM的UTF-8文件当成系统默认编码(也就是windows-1252)来解析。你只需要在写入实际数据前,先写入UTF-8的BOM字节就行:

// 先写入UTF-8 BOM,再创建Writer
fOut.write(new byte[]{(byte)0xEF, (byte)0xBB, (byte)0xBF});
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut, StandardCharsets.UTF_8);

顺便说一句,用StandardCharsets.UTF_8比Charset.forName("UTF-8")更安全,还不用处理异常~

2. 手动指定打开工具的编码(跨平台友好)

如果不想加BOM(比如Linux/macOS下有些工具会把BOM当成文件内容的一部分),那打开文件时手动选UTF-8就行:

  • 用Notepad++打开:顶部菜单栏点「编码」→「UTF-8」(别选带BOM的选项)
  • 用Excel导入:在文本导入向导的第一步,把「文件原始编码」改成「UTF-8」

3. 验证文件的真实编码

你可以用工具确认文件到底是不是UTF-8:

  • Linux/macOS终端:file -i your_file.csv,输出里应该能看到charset=utf-8
  • Windows PowerShell:Get-Content your_file.csv -Encoding Byte | Select-Object -First 3,如果开头是239 187 191,说明有BOM;没有的话也能通过后续字节判断是不是UTF-8

从你的日志「BODY ENCODING: UTF-8」来看,代码里的Writer编码应该是没问题的,重点就在BOM和打开工具的识别上,试试上面的方法应该能解决~

内容的提问来源于stack exchange,提问作者Martin Lund

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:31:02