2008年7月5日 星期六

中文亂碼"蕞蕞蕞蕞"是怎麼來的? - 黑暗執行緒

中文亂碼"蕞蕞蕞蕞"是怎麼來的? - 黑暗執行緒

中文亂碼"蕞蕞蕞蕞"是怎麼來的?

同事遇到一個問題,User抱怨SSIS由ORACLE轉資料到SQL後,所有的中文字都變成"蕞蕞蕞蕞..."了。

(這個字唸"最",不唸"叢"! 慣用倉頡的我本來是不會去研究讀音的,不過看到個性豪邁的User小姐在信中寫道"不會唸厚,拎北查好了,這二個字叫『最最』不叫『叢叢』…",我想我這輩子都不會唸錯了 XD)

SSIS在ORACLE與SQL搬資料時的編碼問題,過去遇過,加上發現只有用特定的機器跑SSIS時會變亂碼,所以我很快地就想到應與機器上的本機設定有關,果然在改過NLS_LANG後,亂碼問就消失了。

不過,好奇心超重的我,心中仍有迷團未解,為什麼不是出現無規則亂碼或問號,而是全都變成"蕞"呢? 利用中文編碼解析工具,我查出"蕞"的BIG5編碼是%bf%bf,而ASCII 0xBF = ¿,一個倒置的問號。看到這個符號,大家應該有點印象吧?

編碼錯誤解析不出來時,常會出現�、?,但有時也會看到¿。當中文完全無法解析,全都的文字都變成¿,兩個¿接在一起,再被當成BIG5解析,就變成"蕞"了!

用以下的實驗證明,四個中文字變成¿¿¿¿,再以BIG5解讀,就變成"蕞蕞",故得證。

沒有留言: