修改VISUAL STUDIO EXPRESS 2012新建C++文件編碼
- 本站文章除注明轉載外,均為本站原創或者翻譯。
- 本站文章歡迎各種形式的轉載,但請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,大概有這樣幾步:
- “工具-選項-環境-文檔-不能以代碼頁的編碼格式保存數據時將文檔保存為Unicode”
- “工具-選項-文本編輯器-常規-自動檢測不帶簽名的UTF-8編碼”
- 在文件打開的情況下,選擇“文件-高級保存選項”,設置編碼和行尾
- 在另存文件的時候選擇“編碼保存”
請原諒我使用中文描述界面,因為當時安裝VS的時候手賤選了簡中界面,然后無論如何都沒法安裝英文語言包……
上面的1、2兩項好像沒什么用,關鍵是第3項。
根據我的習慣,將編碼設置為“Unicode(UTF-8無簽名) – 代碼頁 65001”,將行尾設置為“Unix(LF)”。
然后測試保存,再用Vim打開文件查看編碼,發現文件確實保存為UTF-8編碼了。
但是(什么事情都有但是),當我重新打開這個文件的時候,重新查看“高級保存選項”,發現編碼又變成了“簡體中文(GB2312)-代碼頁936”。
屆時維尼奧神馬!!!
第二步解決
我猜測,是由于VS無法識別不帶簽名的UTF-8編碼文件造成的。
要將一個文本文件被作為UTF-8編碼對待,可能需要以下幾個條件(或者之一):
- 文件中包含UTF-8簽名;
- 文件中包含UTF-8編碼的字符(不能全是ASCII可以解釋的字符);
- 編輯器優先以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) 的嘗試失敗了,所以好像只能被迫接受這種現象了。
關聯文章
- 在Visual Studio Express 2012中創建一個cocos2d-x的win32項目
- Flash Builder安裝和卸載錯誤的解決辦法
- [譯]升級Flash Builder 4.7中的AIR SDK
- Cocos2d-x VS2012 HelloCpp調試
- 用swfobject實現FlashPlayer8的快速安裝(Express Install)