撥開字元編碼的迷霧 字元編碼轉換

2021-08-07 18:51:23 字數 1919 閱讀 9893

撥開字元編碼的迷霧--字元編碼概述

撥開字元編碼的迷霧--編譯器如何處理檔案編碼

撥開字元編碼的迷霧--字元編碼轉換

本文介紹使用windows api進行字元編碼的轉換,涉及widechartomultibytemultibytetowidechar2個api,

api介面名中的multibyte對應著多位元組編碼,如ascii、utf-8等都是多位元組編碼,而widechar字面意思是寬字元,在windows內部寬字元特指utf-16編碼。 原型如下:

int widechartomultibyte(

uint codepage,

dword dwflags,

lpcwstr lpwidecharstr,

int cchwidechar,

lpstr lpmultibytestr,

int cbmultibyte,

lpcstr lpdefaultchar,

lpbool lpuseddefaultchar

);

int multibytetowidechar(

uint codepage,

dword dwflags,

lpcstr lpmultibytestr,

int cbmultibyte,

lpwstr lpwidecharstr,

int cchwidechar

);

std::string unicodetoansi(const std::wstring &str, uint icodepage = cp_acp) 

std::wstring ansitounicode(const std::string &str, uint icodepage = cp_acp)

std::string unicodetoutf8(const std::wstring &str)

std::string unicodetoutf8bom(const std::wstring &str)

strres = (char*)szbuf;

delete szbuf;

return strres;

}std::wstring utf8tounicode(const std::string &str)

std::string ansitoutf8(const std::string &str)

std::string ansitoutf8bom(const std::string &str)

std::string utf8toansi(const std::string &str)

對於只支援簡體中文(部分韓文、日文)的系統,icodepage可以使用cp_acp,這時api會使用系統當前的**頁(簡體中文系統為cp936,即gbk字符集)來進行編碼轉換。 但遇到如下情況就需要手動指定**頁了:

需要轉換的字串中的文字是系統當前**頁不支援的。如字串中含有中文,而當前系統**頁確是英文的;

gbk字符集中只包含了一部分韓文和日文,部分韓文和日文的轉換可以正常轉換,若遇到不能轉換的情況也需要將指定icodepage為特定的支援韓文或日文的**頁了,特別是中文和韓文、日文等混合的情況下。如韓文「탉」不包含在gbk中,若這時仍然使用cp_acp就會得到錯誤的轉換結果?,十六進製制3f。但gb18030(**頁為54936)支援「탉」,可以手動指定icodepage為54936。

如果**中含有gbk不支援的字元,如「탉」、「

撥開字元編碼的迷霧 字元編碼轉換

撥開字元編碼的迷霧 字元編碼概述 撥開字元編碼的迷霧 編譯器如何處理檔案編碼 撥開字元編碼的迷霧 字元編碼轉換 撥開字元編碼的迷霧 mysql資料庫字元編碼 本文介紹使用windows api進行字元編碼的轉換,涉及widechartomultibyte和multibytetowidechar2個a...

撥開字元編碼的迷霧

為什麼這樣的json會解析失敗?為什麼介面上韓文顯示亂碼?ascii和ansi有什麼區別?相信不少人在字元編碼上面摔過跟頭,這篇文章針對開發中需要了解的字元編碼知識進行了簡要的講解,希望能夠對大家有所幫助。字符集就是一系列用於顯示的字元的集合。ascii字符集由美國國家標準協會 american n...

撥開字元編碼的迷霧 編譯器如何處理檔案編碼

使用visual studio建立的c 工程可以在工程屬性配置屬性 常規中配置字符集 使用unicode字符集 預設 使用多位元組字符集。這個設定項不對字元編碼產生直接的影響 注意這裡的 直接 二字,第3節會說到 只會在工程屬性配置屬性 c c 預處理器加入相應的巨集 使用unicode字符集 un...