C Windows平台字串編碼轉換

2021-08-10 03:15:48 字數 2130 閱讀 4749

一、windows api

本文介紹使用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, uint icodepage = cp_acp)

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

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

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

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

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

選擇「以其他編碼儲存」,選擇「unicode(utf-8帶簽名)- **頁65001」儲存。

雖然「簡體中文(gb18030) - **頁54936」也支援這些字元,但不能選擇該選項進行儲存,具體原因在

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

中有詳細的介紹。

c Windows程式設計 字串

include include include include using namespace std 多字元 multichar 也就是ansi編碼的方式,而寬字元 widechar 也就是unicode編碼的方式 wchar unicode字元 pwstr 指向unicode字串的指標 pcws...

字串編碼

1.unicode 的編碼方式 編碼類似1小時和60分鐘的關係,本質的時間刻度還是相同的。unicode 編碼有 utf 8 utf 16 和 utf 32 它們都是將數字轉換到程式資料的編碼方案。utf 8 以位元組為單位。表示乙個字元時,能用乙個位元組就不用兩個或者三個位元組表示。utf 16 ...

字串與編碼

首先應該把位元組陣列看成是string的載體。dot net使用的字串string是unicode編碼的 它也是以unicode編碼的形式顯示字串。以下是用自己語言對幾個常用函式的說明 自己總結的,反正看不明msdn bytes system.text.encoding.unicode.getbyt...