設定 Shell locale 環境變數
我們必須指定 zh_TW.Big5 這個 locale 環境變數給 Shell,Shell 才能正確的處理中文訊息,一般而言我們只要指定 locale 的字元定義 LC_CTYPE 為 zh_TW.Big5 即可讓 Shell 正確的顯示中文,若要讓 Shell 的輸出訊息也顯示中文,則可將 locale 訊息顯示 LC_MESSAGES 也設定為中文的 locale data。
至於要設定 stty pass8 的原因是,台灣地區所通行的 Big5 編碼, 及大陸地區所使用的 GB 編碼,其開頭的位元幾乎都是大於 128 的數值, 也就是所謂 non-ASCII 碼的範圍(ASCII 是指小於 128 的編碼)。 中文問題就在這裡,許多程式由於各式各樣的原因, 並未考慮到輸入的資料可能是 non-ASCII 碼的問題, 程式往往假設了她所要處理的資料都是 ASCII 碼 (因為大部分軟體為外國人發展的),更糟糕的是, 當程式遇到 non-ASCII 碼時,常常假設她不存在, 而將它的第八個位元截去,這是所謂的 8-bit 輸入中文時, 每每將第八位元砍掉,所以中文都變成亂碼。因此必須指定 stty pass8, 警告 Shell 不要將輸入的第八個位元截掉,這樣才能正確顯示中文。
ENABLE_STARTUP_LOCALE 則是 a.out 遺物,他會強制 ld.so 載入程式前, 先呼叫 setlocale(),在 3.x 前就把這個 ugly hack 拿掉了。