我使用Windows上的Microsoft Visual Studio和uBuntu Linux上的GCC開發C++跨平臺。是否有可能讓GCC編譯帶BOM源文件的UTF-8?
在Visual Studio中,我可以在我的代碼使用unicode符號,如 「π」 和 「²」。 Visual Studio始終使用BOM(字節順序標記)將源文件保存爲UTF-8。
例如:
// A = π.r²
double π = 3.14;
GCC編譯高高興興地將這些文件只有當我第一次刪除BOM。如果我不刪除BOM,我得到的錯誤,像這樣的:
wwga_hydutils.cpp:28:9: error: stray ‘\317’ in program
wwga_hydutils.cpp:28:9: error: stray ‘\200’ in program
這使我想到了一個問題:
有沒有辦法讓GCC編譯UTF-8文件,而無需先刪除BOM ?
我使用:
- Windows 7的
- Visual Studio 2010中
和:
- 的Ubuntu 11.10解夢
- GCC 4.6.1
編輯(如的apt-get安裝GCC提供):
作爲第一評論者指出的那樣,我的問題是不的BOM,但有字符串常量之外的非ASCII字符。 GCC不喜歡符號名稱中的非ASCII字符,但事實證明GCC與具有BOM的UTF-8完全兼容。
在gcc 4.4.5中適用於我,在你的問題中使用一個包含兩個UNICODE字符的字符串。帶BOM的文件。另外,你得到的錯誤與BOM沒有任何關係,但似乎是所討論的UNICODE字符在任何字符串之外(這就是爲什麼他們被稱爲_stray_)。 –
@JoachimPileborg是unicode字符在字符串之外,我用作符號名稱的「π」,「²」只是在註釋中。當我刪除BOM時,它確實消除了控制檯輸出中的錯誤,但我想這不是GCC真正處理角色的方式。 – Boinst
@JoachimPileborg,我已經更新了這個問題,以包含我使用unicode字符的上下文。 – Boinst