gbk批量转utf8

相信在电脑这个只认识0和1的蠢货世界里编码是个大问题,稍有不慎我们写的东西或做的东西都会变成一个一个小蝌蚪文,也就是我们所谓的乱码。当然这种情况一般是出现在我们伟大的中文身上,接下来咱们就来说说gbk怎么批量转utf-8。

为了修正文本的编码,mac/linux 下可以用iconv命令来完成此任务。

基本用法为:

iconv-f<源始编码>-t<目标编码>file.txt>newfile.txt

或者通过-o来指定输出:

iconv-f<源始编码>-t<目标编码>file.txt -o newfile.txt

这里以常见的gbk转utf8为例,其他的转码类似。查看该命令支持的编码类型可以通过以下命令:

iconv-l

单文件转换

以下是使用示例:

iconv-f GBK -t UTF-8 foo.txt -o bar.txt

批量转换

进一步,我们可以在脚本里遍历文件实现批量转码。

保存以下脚本为sh文件到目标文件夹运行之。


gbk批量转utf8_第1张图片

上为脚本为多次尝试的结果,注释行是尝试将原来文件的编码做为iconv的-f参数,发现由file命令获得的编码信息并不可靠,所以将它得到的结果做为iconv的入参并不能有效保证文本转码成功,于是索性将入参写死为GBK。

同时先将转码后的文件临时保存,再多一步mv一下也是尝试后的结果。

文件名乱码

另一种情况是文件名的乱码,此种情况经常发生在这样的场景:从windows传来的压缩文件到mac解压后文件名乱码。

大致是因为压缩时采用windows默认编码到mac解压时编码不一致。

完成此任务的命令为convmv。

关于文件名乱码的解决找到了两篇文章,Work around of file name problem while unzip handling CJK encodings和Extracting files from zip which contains non-UTF8 filename in Linux,讲的原理都一样,使用convmv命令。

需要注意的是,为了能够转换成功,需要在解压时将系统语言环境设置成标准Unix C(standard Unix codepage),然后通过7z命令来解压。

不过我在本机经过多次尝试未成功过。文件名乱码有点难解,因为在使用convmv时不好确定原先文件名的编码是什么,所以就无从指定-f参数。而关于如何获取文件名编码信息,可以参考这个,但获取到的编码信息也不是百分百准确的。

参考及引用

iconv(1) - Linux man page

Extracting files from zip which contains non-UTF8 filename in Linux

Work around of file name problem while unzip handling CJK encodings

Extracting files from zip which contains non-UTF8 filename in Linux

How to tell the language encoding of a filename on Linux?

汉字内码扩展规范编辑

你可能感兴趣的:(gbk批量转utf8)