各种编码范围总结以及linux下面的编码批量转化
GB18030>GBK>GB2312>ASCII
ISO-8859-1>ASCII
UTF是世界級別的,
GB18030是中國推廣的,UTF和GB18030這兩種正在競爭。
UTF-8是unicode的一種實現(xiàn)形式,
UTF-16、UTF-32基本不用,似乎沒有學(xué)習(xí)的必要。
注意使用enca命令來查看文件的當(dāng)前編碼,不要使用file -i,后者有時候不準(zhǔn)。
比如得到當(dāng)前文件的類型是GBK以后,那么就在下列命令中對應(yīng)的地方輸入GBK即可
然后就可以進(jìn)行編碼轉(zhuǎn)化(下面的命令中有兩個./是需要修改的,表示當(dāng)前文件在哪里,以及要把文件輸出到哪里)
find ./ -type f -exec iconv -f GBK -t UTF-8 {} -o ./{} \;
-f:from的意思
-t:to的意思
-f和-t的意思是從哪里來,到哪里去
整條命令的意思是:你是誰,你從哪里來,到哪里去?
所以這個命令中的GBK也可以改為GB18030
但是為了盡可能少報錯,最好使用GB18030,因為他的涵蓋范圍是最廣的,但是enca命令并不支持GB18030,所以使用GBK作為源頭(也就是寫在-f后面)就可以了,可能出錯的情況類似如下:
iconv: 未知 28242 處的非法輸入序列
網(wǎng)上雖然說可以增加-c選項,但是我覺得這個不是個合理的解決方案,好在出錯的字符很少,確實可以這么做。
另外,根據(jù)以下鏈接可知
https://www.zhihu.com/question/34856351
由于UTF和GB18030屬于兩套體系,所以他們是互相不完全兼容的。
批量轉(zhuǎn)化代碼(直接遍歷終端當(dāng)前路徑下面的所有最底層子目錄和所有文件)
find ./ -type f -name "*.txt"|while read line;do?
>echo $line;?
>iconv -f GBK -t UTF-8 $line > ${line}.utf8;?
>mv $line ${line}.gbk;?
>mv ${line}.utf8 $line;?
>done
上面的“>”是在終端中輸入“find ./ -type f -name "*.txt"|while read line;do?”以后,終端會自動輸入的,自己不用再輸入第二遍。
另外,在iconv進(jìn)行轉(zhuǎn)化的時候,如果出現(xiàn)以下報錯
“
。。。
./C23-Mine/C23-Mine51.txt
iconv: 未知 353 處的非法輸入序列
./C23-Mine/C23-Mine54.txt
。。。
”
那么就表示在轉(zhuǎn)化C23-Mine51.txt這個文件時報錯,但是其實基本上產(chǎn)生的字符損失是極小的。
最后是收尾工作,刪除所有g(shù)bk后綴的文件
find -name "*.gbk" -exec rm -f {} \;
總結(jié)
以上是生活随笔為你收集整理的各种编码范围总结以及linux下面的编码批量转化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用editplus批量修改文件编码最快速
- 下一篇: linux 其他常用命令