*nix下文件字符编码转换方法

为毛需要转换

历史原因,公司内部的source code中充斥着大量的GBK编码,但是明显UTF-8更适合国际化的字符需求。如果不转换,在IDE中各种字符编码切换,各种蛋疼。一不小心,多种编码一叠加,造成不可逆的乱码保存,那就永远乱码的噩梦了。
当然,更好的国际化支持,除了统一用UTF-8保存文件之外,更好的做法是,source code中压根就不应该出现中文(当然,这点可能会被很多人喷,算了,这个不是重点,本文的重点是怎么转)。

如何转换

基本都是利用*nix系本身提供的iconv一行帮你搞定问题。

*nix下的通用做法

这里,*nix是指Unix like(包括Mac)、Linux系下的通用做法,利用输出重定向

find . -name '*.java'| while read file; do iconv -f GBK -t UTF-8 "$file" > /tmp/a; cp /tmp/a "$file"; done

 

这里,你需要修改无非是管道前面的find命令,获取你这种关心的文件就行啦。

Ubuntu下的做法

如果你用的是debian发行版的Ubuntu版本,那么恭喜你,你有稍微简化一点的写法,就是可以真正利用Linux下iconv的-o参数修改同一个文件。

find . -name '*.java' -exec iconv -f GBK -t UTF-8 {} -o {} \;

 

注意:对于替换当前文件自己,-o参数并非在所有Linux下都管用

上述方法,在公司内的Linux发行版下,就不好使。会造成被修改文件被清空!
所以,安全第一,你还是上面的通用命令吧。

你可能感兴趣的:(Linux,Mac)