修改VISUAL STUDIO EXPRESS 2012建立C++檔案編碼

來源:互聯網
上載者:User

標籤:blog   http   使用   os   io   檔案   資料   ar   

  • 本站文章除註明轉載外,均為本站原創或者翻譯。
  • 本站文章歡迎各種形式的轉載,但請18歲以上的轉載者註明文章出處,尊重我的勞動,也尊重你的智商;
  • 本站部分原創和翻譯文章提供markdown格式源碼,歡迎使用文章源碼進行轉載;
  • 本文標題:修改Visual Studio Express 2012建立C++檔案編碼
  • 本文連結:http://zengrong.net/post/1900.htm


2013-12-03 更新:增加關於UTF-8(BOM)的說明

 

我突然發現Visual Studio Express 2012(後簡稱為VS)建立的源檔案是cp936(GB2312)編碼,這個以後在Linux和Mac下面編譯起來可能會有麻煩。

初步解決

於是,我嘗試將已有項目中的檔案改成了UTF-8格式,並設定儲存格式為UTF-8,大概有這樣幾步:

  1. “工具-選項-環境-文檔-不能以字碼頁的編碼格式儲存資料時將文檔儲存為Unicode”
  2. “工具-選項-文字編輯器-常規-自動檢測不帶簽名的UTF-8編碼”
  3. 在檔案開啟的情況下,選擇“檔案-進階儲存選項”,設定編碼和行尾
  4. 在另存檔案的時候選擇“編碼儲存”

請原諒我使用中文描述介面,因為當時安裝VS的時候手賤選了簡中介面,然後無論如何都沒法安裝英文語言套件……

上面的1、2兩項好像沒什麼用,關鍵是第3項。

根據我的習慣,將編碼設定為“Unicode(UTF-8無簽名) – 字碼頁 65001”,將行尾設定為“Unix(LF)”。

然後測試儲存,再用Vim開啟檔案查看編碼,發現檔案確實儲存為UTF-8編碼了。

但是(什麼事情都有但是),當我重新開啟這個檔案的時候,重新查看“進階儲存選項”,發現編碼又變成了“簡體中文(GB2312)-字碼頁936”。

屆時維尼奧神馬!!!

第二步解決

我猜測,是由於VS無法識別不帶簽名的UTF-8編碼檔案造成的。

要將一個文字檔被作為UTF-8編碼對待,可能需要以下幾個條件(或者之一):

  1. 檔案中包含UTF-8簽名;
  2. 檔案中包含UTF-8編碼的字元(不能全是ASCII可以解釋的字元);
  3. 編輯器優先以UTF-8編碼來解析。

例如我對Vim的設定,就是將UTF-8偵測放在優先的位置。

那麼,讓我來驗證一下猜測是否正確。

在“進階儲存選項”中將編碼設定為“Unicode(UTF-8帶簽名) – 字碼頁 65001”,然後儲存。重新開啟,編碼沒有變化。

這說明我的猜測是正確的。

那麼,再來驗證一下上麵條件的第2項是否正確。

在“進階儲存選項”中將編碼設定為“Unicode(UTF-8無簽名) – 字碼頁 65001”,加入一些中文內容,然後儲存。重新開啟,編碼沒有變化。

那麼,現在我可以斷定,VS可以正常識別UTF-8編碼,但我需要滿足上面的條件1或者2。

需要注意的是,即使是已有的項目中,所有檔案都已經是UTF-8編碼(例如cocos2d-x的項目模版),但使用VS開啟並進行儲存後,原來的檔案編碼都會變成CP936。這是因為原來的模版檔案中的檔案是UTF-8(無簽名)的。至於解決方案,參考上面了。

建立C++檔案的編碼

修改下面這幾個模版檔案的編碼和行尾值,在VS中建立的cpp或者h檔案,預設就是UTF-8編碼了(路徑自己改):

  • c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\VCProjectItems_WDExpress\newc++file.cpp
  • c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\VCProjectItems_WDExpress\hfile.h
  • c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\VCNewItems_WDExpress\newc++file.cpp
  • c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\VCNewItems_WDExpress\hfile.h

這些檔案預設都是0位元組的空檔案,因此建議在其中加入一些注釋,並將檔案編碼設定為UTF-8(帶簽名),行尾設定為Unix格式即可。

如果希望修改更多的東西,比如wizard之類的,可以看看這篇文章:VS2008中自訂C++工程模板與修改建立檔案預設編碼的辦法

最後的問題

這種修改預設檔案模版為 UTF-8(帶簽名) 的方法,其實是不被推薦的,原因是這本來是微軟一廂情願的做法。而我們的項目本來就應該跨平台,這種檔案在Mac平台下編譯,可能會有問題。

詳見這篇:「帶 BOM 的 UTF-8」和「無 BOM 的 UTF-8」有什麼區別?網頁代碼一般使用哪個?

但是,由於我 使用Eclipse+CDT開發Cocos2d-x(不用Visual Studio) 的嘗試失敗了,所以好像只能被迫接受這種現象了。

關聯文章
  1. 在Visual Studio Express 2012中建立一個cocos2d-x的win32項目
  2. Flash Builder安裝和卸載錯誤的解決辦法
  3. [譯]升級Flash Builder 4.7中的AIR SDK
  4. Cocos2d-x VS2012 HelloCpp調試
  5. 用swfobject實現FlashPlayer8的快速安裝(Express Install)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.