vs 工程設(shè)置中的“字符集”:mbcs與utf8編碼

  • windows 的api中大多都有兩個(gè)版本
    例如,多字節(jié)字符集的MessageBoxA,接收char 類型參數(shù)、和寬字符(unicode)的MessageBoxW,接收wchar_t類型參數(shù)。
    "A"系列api的A是指此api接收mbcs的參數(shù),"W"系列接收寬字符字符串。
    它們每個(gè)都 一個(gè)沒有后綴的版本如:MessageBox,這個(gè)api其實(shí)取決于unicode的宏定義:
#ifdef UNICODE
   #define MessageBox MessageBoxW
#else
   #define MessageBox MessageBoxA
#endif

與之對應(yīng)的,也有參數(shù)類型的定義。

#ifdef UNICODE
    typedef wchar_t TCHAR;
#else
    typedef char TCHAR;
#endif
  • 編碼
    在不同版本的api中,字符串內(nèi)容的編碼也有區(qū)別。
    char類型(對應(yīng)MessageBoxA)的編碼取決于本地代碼頁(locale-specific code page)。
    wchar_t類型(對應(yīng)MessageBoxW)的編碼為unicode,在windows平臺上,unicode特指utf16,nothing else.

  • MBCS與utf-8
    mbcs是"multi-byte character set",多字節(jié)字符集。聽起來這個(gè)字符集應(yīng)該包含utf8。
    但是在windows上,MBCS僅代指"A"系列api支持的字符集,它包含的代碼頁有:932 (Shift_JIS), 936 (GBK), 949 (KS_C_5601-1987), 和950 (Big5)。
    但是沒有utf-8。
    要使用utf8編碼的字符串,要使用MultiByteToWideChar將utf8轉(zhuǎn)為utf16,調(diào)用"W"系列的api.然后再使用WideCharToMultiByte將結(jié)果轉(zhuǎn)為utf8。
    其實(shí)在"A"系列的api內(nèi)部也經(jīng)歷了這樣的轉(zhuǎn)變,最終調(diào)用的也是"W"系列的api。

  • 在字符集選項(xiàng)中還有一個(gè)“未設(shè)置”,這個(gè)選項(xiàng)下,在代碼里調(diào)用api的時(shí)候,就要看相關(guān)的宏定義了,如上面的UNICODE或者_MBCS。

ref:
https://stackoverflow.com/questions/3298569/difference-between-mbcs-and-utf-8-on-windows
https://stackoverflow.com/questions/17742379/visual-studio-character-sets-not-set-vs-multi-byte-character-set

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 字符是用戶可以讀寫的最小單位。計(jì)算機(jī)所能支持的字符組成的集合,就叫做字符集。字符集通常以二維表的形式存在。二維表的...
    劉惜有閱讀 8,372評論 2 14
  • 字符集和編碼簡介 在編程中常常可以見到各種字符集和編碼,包括ASCII,MBCS,Unicode等字符集。確切的說...
    蘭山小亭閱讀 9,079評論 0 13
  • 0 前言 在平時(shí)的開發(fā)過程中大部分人應(yīng)該都遇到過中文亂碼問題,瀏覽網(wǎng)頁時(shí)也會(huì)遇到內(nèi)容顯示亂碼的情況,一般遇到這種情...
    小豬啊嗚閱讀 2,892評論 1 10
  • UTF-8 編碼提供了一種簡便而向后兼容的方法, 使得那種完全圍繞 ASCII 設(shè)計(jì)的操作系統(tǒng), 比如 Unix,...
    謝大見閱讀 4,977評論 0 3
  • 現(xiàn)在距知曉崗位分布情況和檔案分?jǐn)?shù)已過去進(jìn)十天,距選崗還有不到一周時(shí)間。在過去的幾天里,我的心情跟過山車差不多。自己...
    踏上筆尖閱讀 230評論 0 0

友情鏈接更多精彩內(nèi)容