星期三, 1月 02, 2008

測試編碼轉換用的 BASH script

最近因為某些狀況,雖然有一些編碼偵測的工具可以用,例如 Mozilla 計畫的 Charset DectorJserv 兄的 charset-dector 等等,但某些情況下並不適用。所以就希望能有測試所有編碼轉換的方法。

所幸 UN*X 的 Shell Script 的威力強大,加上 glibc 提供的 iconv 工具程式,讓要達到測試多種編碼轉換,變得相當容易。雖然直接用 command line 下指令也可以,不過我覺得還是寫成 script 方便重複使用,會是比較好的方式。以下我稱之為 convtest 的 BASH script,就是我之前寫的測試用工具。


#!/bin/bash
#
# convtest:: 編碼轉換測試工具
#
# Shang-Feng Yang <storm dot sfyang at gmail dot com>
#
# License: GPL

TOENC="utf8"

STR="$1"

[ "x${STR}" == "x" ] &&{
INPUT="$(cat - |sed -e 's/\n/\\n/g')";} || {
INPUT=${STR}; }

for FROMENC in $(iconv -l | sed -e 's|\(.\+\)/.*/.*|\1|g'); do
    echo "Encoding=$FROMENC"
    echo -e "${INPUT}" | iconv -c -f ${FROMENC}\
     -t ${TOENC} 2&gt;/dev/null
    echo -e '\n\n'
done


這個 script 還有很多可以改進的地方,像是輸出編碼的自動偵測等等,不過通常這種測試,在非 Unicode 的 locale 下並沒有太大的意義。使用方式很簡單,可以直接把要轉換的字串當作參數傳入:


$ convtest &lt;測試字串&gt; | less


也可以把要轉換的內容用管道以輸出導向的方式傳入:


$ cat target.txt | convtest |less


繼續閱讀全文