文件编码转换工具(UTF-8 带BOM・Shift_JIS)

转换CSV或文本文件的字符编码。为UTF-8文件添加BOM以便Excel正确打开,或转换为Shift_JIS。自动识别原编码,支持换行符转换,全部在浏览器内处理。

按用途推荐的设置

应保存为哪种编码取决于接收方。以下为参考。

需求 推荐设置
用Excel直接打开UTF-8的CSV UTF-8 + 添加BOM(Excel可正确判断编码)
导入旧业务系统・会计软件 Shift_JIS + CRLF(面向Windows的传统组合)
由程序(Python・PHP等)读取 UTF-8(无BOM)+ LF(BOM会混入首个字段名)
用Mac版Excel打开 UTF-8 + 添加BOM
导入Google表格 UTF-8(BOM可有可无)(BOM会被自动忽略)
准备旧邮件环境的正文 JIS(ISO-2022-JP)

各编码的特点

本工具支持的编码及注意事项。

编码 特点
UTF-8 当前的通用标准,可表示各国文字与表情符号。
UTF-8(带BOM) 文件开头附加3字节标记,使Excel不会误判编码。
Shift_JIS Windows日文环境长期使用的编码,无法表示表情符号与部分异体字。
EUC-JP 主要用于UNIX系统的日文编码,现在很少新采用。
ISO-2022-JP(JIS) 邮件中使用的编码,无法表示半角片假名。

CSV 的乱码为何会发生

以 Excel 开启 CSV 时文字崩坏的原因,多半是档案的字元编码与 Excel 所假定的字元编码不一致。Windows 版的 Excel 在 CSV 档案没有任何标记时,会假定其内容为当地既有的字元编码(日文环境即 Shift_JIS)来读取。然而近来的网路服务或程式所输出的 CSV 多为 UTF-8,将 UTF-8 的位元组序列当作 Shift_JIS 解读的结果,便会显示出「譁�蟄怜喧縺�」这类崩坏的字串。

解决方式有两种。一是将档案转换为 Shift_JIS,二是维持 UTF-8 并在档案开头加上 BOM(Byte Order Mark,3位元组的标记)。有 BOM 时 Excel 便能判断「这是 UTF-8」,因此可在不改动内容的情况下避免乱码。本工具支援两种转换,原始档案的字元编码会自动判定。处理全部在浏览器内进行,档案不会送往伺服器。

字元编码转换的使用方法

  1. 选择档案 将 CSV 或文字档拖放进来,或点击选择。读入后会自动判定原本的字元编码与换行字元。
  2. 以预览确认判定结果 若预览的文字能正确阅读,即表示判定成功。若看起来崩坏,可能选到了文字档以外的档案。
  3. 选择转换目标 若要以 Excel 开启,请选「UTF-8」+「加上 BOM」;若要汇入旧的业务系统,请选「Shift_JIS」。
  4. 下载 按下「转换并下载」,便会储存为在原档名加上字元编码後缀(_utf8bom、_sjis 等)的档案。

用好本工具的小技巧

  • 若只是想用Excel打开,UTF-8加BOM最安全,正文字符完全保留。
  • 转换为Shift_JIS时无法表示的字符会变成「?」。本工具会先列出将要丢失的字符。
  • 由程序读取的文件请勿添加BOM,否则BOM会成为首个字段名的一部分。

这些时候可以使用

从网路服务输出的 CSV 在 Excel 中乱码

以 UTF-8 输出营收资料或会员名单的服务很多,直接以 Excel 开启便会乱码。只要加上 BOM 即可解决。

无法汇入会计软体或薪资系统

旧的业务系统有时只接受 Shift_JIS 的 CSV。将 UTF-8 档案转换为 Shift_JIS 即可顺利汇入。

以程式读取带 BOM 的 CSV 时首栏异常

BOM 是看不见的3个位元组,直接读取时会混入第一个栏位名称中。转换为去除 BOM 的 UTF-8 即可解决。

换行字元(CRLF/LF)的差异导致被视为一行

在 Mac 上以 LF 建立的档案,若以旧的 Windows 应用程式开启,换行可能被忽略而整份看起来只有一行。转换为 CRLF 後再交付即可解决。反之,在 Windows 建立的 CRLF 档案通过 Unix 系指令时行尾会残留 ^M,此时请转换为 LF。

想确认乱码档案的内容

由于会自动判定字元编码并正确重新读取,即使原本开启後无法阅读的档案,也能以预览确认其内容。

与字元编码相关的术语

字元编码
将文字与电脑内部的位元组序列相互对应的规则。输出时与读取时的规则不同,便会发生乱码。
BOM
Byte Order Mark 的缩写,是置于档案开头的3个位元组(EF BB BF)标记。具有告知应用程式「这是 UTF-8」的作用,但以程式读取时可能被视为多余的字元。
换行字元
表示一行结束的位元组。Windows 使用 CRLF(2位元组),Mac 与 Linux 使用 LF(1位元组),因此跨环境时可能看起来只有一行,或多出额外的行。
Shift_JIS
在 Windows 的日文环境中长期广泛使用的字元编码。收录字数少于 UTF-8,无法表现表情符号与部分异体字。
乱码(mojibake)
以与原本不同的字元编码读取後,排列出不具意义文字的状态。「譁�蟄怜喧」这类排列是将 UTF-8 当作 Shift_JIS 读取时的典型例子。

常见问题

若接收方只有Excel,请选带BOM的UTF-8,可在不丢失任何字符的前提下避免乱码。只有当目标系统明确要求时才需要Shift_JIS。

文件开头的3个字节(EF BB BF)。它不会显示为文字,但Excel等应用会据此判断编码为UTF-8,正文内容不受影响。

不会。识别、转换与下载全部在浏览器内完成,文件内容不会发送到外部。
工具君

闲话 ― 乱码的形状会告诉你原因

乱码有可辨认的规律。出现一串互不相关的汉字,通常是把UTF-8的字节当作Shift_JIS读取所致——UTF-8中一个日文字符占3字节,按2字节重新切分自然会得到完全不同的字。反之把Shift_JIS当作UTF-8读取时,由于字节序列本身无效,会出现一排替换字符。

BOM原本是为UTF-16标示字节顺序而设计的。UTF-8不存在字节顺序问题,因此Unicode标准并不推荐为UTF-8添加BOM。但在Windows生态中它依然广泛使用,因为只能靠猜测判断编码的应用确实需要一个明确的标记。