2012-02-19 56 views
21

我的問題關於visual studio 2010中的「字符集」選項。關於visual studio 2010中的「字符集」選項

字符集
- 沒有設置
- 使用Unicode字符集
- 使用多字節字符集

我想知道在「字符集」三個選項之間的差異。
而且,如果我選擇了它們,會影響對英語以外的語言的支持。 (如RTL語言)。

回答

24

這是一個兼容性設置,用於舊版代碼,該代碼是爲未啓用Unicode的舊版Windows編寫的。 Windows 9x系列中的版本,Windows ME是最後一個被廣泛忽視的版本。選擇「未設置」或「使用多字節字符集」後,所有將字符串作爲參數的Windows API函數都會重新定義爲一個小的兼容性輔助函數,該函數將char*字符串轉換爲wchar_t*字符串,即API的本機字符串類型。

此類代碼嚴重依賴於默認系統代碼頁面設置。代碼頁將8位字符映射爲用於選擇字體字形的Unicode。運行代碼的機器具有正確的代碼頁時,您的程序只會生成正確的文本。如果代碼頁不匹配,那麼其值> = 128的字符將呈現錯誤。

總是選擇「使用Unicode字符集」爲現代代碼。特別是當您想要支持從右至左佈局的語言,並且您的開發機器上沒有選擇阿拉伯語或希伯來語代碼頁時。在代碼中使用std::wstringwchar_t[]。獲取實際的RTL佈局需要打開CreateWindowEx()調用中的WS_EX_RTLREADING樣式標誌。

9

漢斯已經回答了這個問題,但我發現這些設置有好奇的名字。 (究竟是不是被設置,以及爲什麼其他兩個選項聽起來如此相似?)關於指出:

  • 「統一」這裏是特別UCS-2編碼微軟說話。這是漢斯描述的推薦和非代碼頁依賴。有一個名爲_UNICODE的相應的C++ #define標誌。
  • 「多字節字符集」(又名MBCS)這裏是官方的Microsoft短語,用於描述他們以前的國際文本編碼方案。正如Hans所述,有不同的MBCS代碼頁描述不同的語言。編碼是「多字節」,因爲部分或全部字符可能由多個字節表示。 (有些代碼頁使用類似於UTF-8的可變長度編碼。)典型的代碼頁仍然將所有ASCII字符表示爲每個一個字節。有一個相應的C++ #define標誌,名爲_MBCS
  • 「未設置」顯然是指編譯with_UNICODE或_MBCS爲#defined。在這種情況下,Windows使用嚴格的每字符編碼一個字節。 (再次有在這種情況下,提供了一些不同的代碼頁。)

Difference between MBCS and UTF-8 on Windows進入中有更詳細的這些問題。

+0

太糟糕了微軟拒絕添加對UTF-8的支持 – MarcusJ 2017-12-10 21:57:24

相關問題