使用PSPad來Coding,有一個非常彈性的功能就是針對文件的任意編碼,直接在功能表裡就可以選用,而且馬上就切換了。其實本來對這個功能沒有特別的「感恩」,因為一開始就是這樣用了,但最近使用到NetBeans來Coding,發現這個IDE的編碼設定是以「專案」為單位,個別文件本身還不一定能夠設定,在一個地方是可以看到各別檔案的設定值,但卻是唯讀的。所以我才回過頭來針對PSPad的任意編碼功能來「感恩」。
不過,因為這種彈性,有時候卻會讓我忽略它,因而導致一些出乎意料的結果。例如最近修改到一段程式,它的資料庫編碼是big5,自然script本身的編碼也是big5。這個修改的目的是為了要新增一些功能,新增功能是以頁為單位,基本上還是會利用既有的程式檔案來修改,但在複製的過程我是利用PSPad開新檔,然後再從舊檔案複製程式過來。接著再針對需要修改的片段做一些調整,完成之後想說應該順利完成了,但測試的結果卻是出乎意料。
出問題的是這一段explode(“[※]”,$body),原本應該要能夠將$body的內容藉由[※]來做分割,但卻一直沒有成功,實際檢查$body的內容,也的確存在[※],一度以為$body裡的[※]和script裡寫的[※]是不一樣,但從$body擷取[※] 並替換掉script本身的[※],結果還是一樣。我甚至以為explode壞掉了。
就這樣卡在螢幕面前一段時間之後,突然我發現PSPad下方狀態列的編碼是UTF-8。於是將檔案編碼改回BIG5之後就正常了。
這次的除錯經驗有兩個想法,其一是,如果是想利用舊檔來修改,那麼整個複製舊檔後再來修改,比較不容易出現上述的問題。其二是,NetBeans編碼以「專案」為單位,應該也是有其專業的考量,按理應該整個專案的編碼皆一致,個別檔案自然是不需要個別編碼才對。