關於編譯環境的一次奇遇(作業系統編碼問題)

一個使用 C# 撰寫,確定可以編譯成功的專案,換了新的編譯環境後竟然編譯失敗了?

  • error CS1012: Too many characters in character literal

依據 MS Developer Network 官方說法,程式碼中所使用的單引號只能一次包一個字元,不能包一組字串(字元陣列)。但這個過程我的確沒有改過程式,到底單引號中的字元是怎麼無故變成字串的呢?請看這段引發問題的程式:

  • string[] fixflds = fixfld.Split(‘、’);

原來是作業系統語系不同惹的禍:由於「、」是中文全形符號,它在 Big5 環境被認定是單一字元,但在英文版 OS 下立馬被當成兩個字元了。因此,若仍然很想在英文環境完成這個任務,最快的解法就是「在編譯前把編碼改為 Big5」,但該怎麼改呢?

我先到 command line 去查看「目前」的編碼:

  • C:\>chcp
  • Active code page: 437

然後,試著這樣去改它:

  • C:\>chcp 950
  • Invalid code page

結果當然是失敗了。難道只能回中文版才能處理嗎?或是補裝中文語系就好了呢?

結果,方法出乎意料的簡單:

到  Windows 的「地區設定」、「管理」,把  Language for non-Unicode programs 改為  Chinese (Traditional, Taiwan),就能快速改變編碼,讓編譯成功過關囉!

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *