在写代码的时候,常常会遇到字符编码的问题。比如 GBK 编码的代码文件以 UTF-8 编码打开就会造成中文乱码,而且这种情况还很常见,比如 Eclipse 中的 Java 代码和 Visual Studio 中的 C++ 代码都是默认 GBK 编码的。

而大家知道,出于通用性的考虑,最好还是使用 UTF-8 编码。因此这时就需要将 GBK 编码转换为 UTF-8 了。

背景

比较笨的方法是用代码编辑器打开,然后以 UTF-8 编码保存。

文件少还好说,文件多起来就是个很累人的事。

利用代码转换

用代码来实现转换也是挺简单的事:以 GBK 编码读取文件的内容,再以 UTF-8 编码写入新文件或者覆盖原文件即可。

下面是使用 C# 的示例代码:

1
2
3
4
5
6
7
var content = File.ReadAllText(currentFile, Encoding.GetEncoding(936)); // 以 GBK 编码读取文件
var utf8Encoding = new UTF8Encoding(bomFlag); // 是否包含 BOM(byte order mark,字节顺序标记)

var path = Path.Combine(output, fileName); // 将输出文件夹的路径与目标文件的文件名组合,获得目标文件的完整路径
var newFileStream = File.Create(path); // 创建目标文件
newFileStream.Close(); // 创建完成后关闭
File.WriteAllText(path, content, utf8Encoding); // 将原文件的内容以 UTF-8 编码写入到目标文件

批量工具

使用代码转换多个文件或者一个文件夹下的文件也是很简单的事,这里就不赘述了。

具体使用时,需要选择一或多个文件,或者选择文件夹。

但是控制台应用程序使用起来也是个麻烦,于是笔者索性做了个小工具,放在 GitHub 仓库里。

评论