最近因為某些狀況,雖然有一些編碼偵測的工具可以用,例如 Mozilla 計畫的 Charset Dector 和 Jserv 兄的 charset-dector 等等,但某些情況下並不適用。所以就希望能有測試所有編碼轉換的方法。
所幸 UN*X 的 Shell Script 的威力強大,加上 glibc 提供的 iconv 工具程式,讓要達到測試多種編碼轉換,變得相當容易。雖然直接用 command line 下指令也可以,不過我覺得還是寫成 script 方便重複使用,會是比較好的方式。以下我稱之為 convtest 的 BASH script,就是我之前寫的測試用工具。
這個 script 還有很多可以改進的地方,像是輸出編碼的自動偵測等等,不過通常這種測試,在非 Unicode 的 locale 下並沒有太大的意義。使用方式很簡單,可以直接把要轉換的字串當作參數傳入:
也可以把要轉換的內容用管道以輸出導向的方式傳入:
所幸 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>/dev/null
echo -e '\n\n'
done
這個 script 還有很多可以改進的地方,像是輸出編碼的自動偵測等等,不過通常這種測試,在非 Unicode 的 locale 下並沒有太大的意義。使用方式很簡單,可以直接把要轉換的字串當作參數傳入:
$ convtest <測試字串> | less
也可以把要轉換的內容用管道以輸出導向的方式傳入:
$ cat target.txt | convtest |less
繼續閱讀全文