過去網站專案很多都採用Big5編碼,但在因應Unicode難字或多國語系時,免不了要吃苦頭。現在的新專案,都應該要以Unicode為尊,編碼方式則以UTF-8為王。

將舊Big5專案裡的檔案搬移到UTF-8 ASP.NET專案時,會有編碼不符的問題。網頁編碼錯亂會導致螢幕出現亂碼,很容易發現與校正。相形之下,當Big5編碼js檔被複製到UTF-8 Web Site時,產生的現象就高深莫測,讓許多人會意不過來。

在我的經驗中,依個人運勢好壞,可能會有以下難易程度不同的徵兆:

  1. 祖上積德型
    如果你的js如下,多半能直接看到Popup的對話框中有????或亂碼,不難追出與js的編碼有關,這是最容易察覺的情況。
    function showMsg() { alert('執行完成!'); }
  2. 凡夫俗子型
    如果你的js如下,會出現Unterminated string constant + Object expected兩個錯誤,有點難猜了吧? 不過"字串常數未正常終結"仍提供了相關的提示,有經驗的人多半追得到。
    (許功蓋先生MySQL, PHP界令人聞風喪膽,恐怖程度直逼佛地魔。啥? 沒聽過許功蓋? 那你肯定是麻瓜,哈!)
    function showMsg() { alert('執行成功'); }
  3. 天打雷劈型
    如果你的js如下,錯誤訊息將會是Expected '}' + Object expected!
    function showMsg() {
        alert('成功'); //'
    }
    怎樣,很難聯想到是編碼問題吧? (遇此情況,最好順便檢討一下平時是否有心懷不軌、負心劈腿、濫發好人卡等缺德行徑,才會遭此天譴~~)

js編碼不符的偵察不容易,但解決方法很簡單,將檔案另存為UTF-8格式就OK了。所以在遇到詭異Javascript錯誤時能先排除js檔編碼不合問題,應該就可明哲保身吧! 阿彌陀佛。


Comments

# by chicken

Microsoft 把 JScript Engine 內建在 windows, 其實到處都碰的到這種鳥問題.. WSH, ASP (server side) 也都碰過... 2000 的 engine + iis5 + asp, 還沒有辦法直接接受 UTF-8 編碼的 java script 當作 server side script, 碰到 unicode 問題只能遶路解決.. 我的作法是把字串都拆到 xml 檔, 然後在 build 時直接產生靜態 jscript, 像這樣: var reskey_001 = unescape("%12%34%56%78"); var reskey_002 = unescape("%12%34%56%78"); var reskey_003 = unescape("%12%34%56%78");

Post a comment