中文字處理的問題

Published on 02/16,2005

最近在用sed處理中文資料的時候,發現經過處理後,有少數字會變成亂碼,後來才知道原來是locale沒設定好。

SHELL>echo '65,3,"1111","謝婷雯","xxx@yahoo.com.tw'| sed 's/@/","/g'
結果得到:
65,3,"1111","謝?,"雯","xxx","yahoo.com.tw

我在自己帳號下的.bash_profile裡面加上
LC_ALL=zh_TW.Big5

SHELL>echo '65,3,"1111","謝婷雯","xxx@yahoo.com.tw'| sed 's/@/","/g'
結果就是
65,3,"1111","謝婷雯","xxx","yahoo.com.tw

說明:
locale的環境變數設定有下列幾個:
1.LC_CTYPE: 字元分類及處理方式。
2.LC_COLLATE: 字元順序與字串比較。
3.LC_MESSAGES: 程式中用何種語言來顯示訊息。
4.LC_MONETARY: 貨幣顯式格式。
5.LC_NUMERIC: 數字顯式格式。
6.LC_TIME: 日期與時間的顯式格式。
7.LC_ALL: 此類別可以一次設定以上所有的類別。
8.LANG: 作用類似 LC_ALL,也可用來一次設定所有的 locale 環境。

使用locale這個程式可以看到目前locale的設定情形:
SHELL>locale
LANG=en_US.UTF-8
LC_CTYPE="zh_TW.Big5"
LC_NUMERIC="zh_TW.Big5"
LC_TIME="zh_TW.Big5"
LC_COLLATE="zh_TW.Big5"
LC_MONETARY="zh_TW.Big5"
LC_MESSAGES="zh_TW.Big5"
LC_PAPER="zh_TW.Big5"
LC_NAME="zh_TW.Big5"
LC_ADDRESS="zh_TW.Big5"
LC_TELEPHONE="zh_TW.Big5"
LC_MEASUREMENT="zh_TW.Big5"
LC_IDENTIFICATION="zh_TW.Big5"
LC_ALL=zh_TW.Big5

參考資料:
http://xcin.linux.org.tw/i18n/pc2000/p2/node4.html


寫個回應吧

發表回應 {nocache:b7b343b4a1d6258382d2e3edef9878bc#0}

回應 中文字處理的問題