linux批量修改文件字符集shell 腳本


需求:需要將 “/home/zichen/dxzs0305”目錄下所有PHP文件字符集由 UTF-8轉換爲GB2312

shell腳本內容:

#!/bin/bash -x
SUBFIX="php"  #需要轉換的目標文件後綴
cd /home/zichen/dxzs0305     #目標文件根目錄

if [ -z $1 ];then
    cd $PWD
else
    if [ -d $1 ];then
        cd $1
    else
        echo " $1 is not exist;"
        exit 1
    fi
fi

for i in $SUBFIX;
do
    files=`find . -name "*.$i"`
    for f in $files;
    do
        type=`file $f|awk -F':' '{print $2}' |awk  '{print $1}'` #獲取文件類型
        if [ $type != "ISO-8859" ];then
            iconv -f UTF-8 -t GB2312 -o $f $f   #使用  iconv函數進行轉換 
          #  enca -L UTF-8 -x zh_cn $f   #如果使用enca 進行轉換,需要安裝 enca    命令 sudo apt-get  install  enca 
        else
            echo "$f encoding is :$type"
        fi

    done
done

 iconv 函數參數簡介:

iconv命令用於轉換指定文件的編碼,默認輸出到標準輸出設備,亦可指定輸出文件。
用法: iconv [選項...] [文件...]
有如下選項可用:
輸入/輸出格式規範:
-f, --from-code=名稱 原始文本編碼
-t, --to-code=名稱 輸出編碼
信息:
-l, --list 列舉所有已知的字符集
輸出控制:
-c 從輸出中忽略無效的字符
-o, --output=FILE 輸出文件
-s, --silent 關閉警告
--verbose 打印進度信息
-?, --help 給出該系統求助列表
--usage 給出簡要的用法信息
-V, --version 打印程序版本號

 

 應注意問題 :

    1. 轉換完成後,請注意與未轉換前的PHP文件做對比檢查,防止因爲轉換後的文件破損(使用iconv轉換文件,如果文件內部行與行之間存在多個空行,會終止對多個空行後的代碼進行轉換,忽略不計)而引發其他問題,導致項目無法正常使用。

    2.如果系統中使用PHP自帶的 json_encode 函數,請注意傳遞參數或傳遞查詢結果的字符集,好像php自帶 的 json_encode只支持UTF-8格式字符集,請注意檢查並使用 iconv()函數進行轉換,不然會出現中文顯示或插入數據庫爲空現象!


 

 

發佈了38 篇原創文章 · 獲贊 10 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章