在進行windows程式設計時,常常遇到不同字元編碼之間的轉換以對應不同的輸出格式,本文介紹寬位元組utf-8編碼格式和多位元組之間的專案轉換。分別呼叫windows底層函式multibytetowidechar和 widechartomultibyte實現。
1.utf-8轉多位元組
std::string u82mb(constchar*cont)
int num = multibytetowidechar(cp_utf8, null, cont, -1
, null, null);
if (num <= 0
)
wchar_t* buffw = new
(std::nothrow) wchar_t[num];
if (null ==buffw)
multibytetowidechar(cp_utf8, null, cont, -1
, buffw, num);
int len = widechartomultibyte(cp_acp, 0, buffw, num - 1
, null, null, null, null);
if (len <= 0
)
char* lpsz = new (std::nothrow) char[len + 1
];
if (null ==lpsz)
widechartomultibyte(cp_acp,
0, buffw, num - 1
, lpsz, len, null, null);
lpsz[len]='\0'
; delete buffw;
std::
string
rtn(lpsz);
delete lpsz;
return
rtn;
}
2.多位元組轉utf-8
std::string mb2u8(constchar*cont)
int num = multibytetowidechar(cp_acp, null, cont, -1
, null, null);
if (num <= 0
)
wchar_t* buffw = new
(std::nothrow) wchar_t[num];
if (null ==buffw)
multibytetowidechar(cp_acp, null, cont, -1
, buffw, num);
int len = widechartomultibyte(cp_utf8, 0, buffw, num - 1
, null, null, null, null);
if (len <= 0
)
char* lpsz = new (std::nothrow) char[len + 1
];
if (null ==lpsz)
widechartomultibyte(cp_utf8,
0, buffw, num - 1
, lpsz, len, null, null);
lpsz[len]='\0'
;
delete
buffw;
std::
string
rtn(lpsz);
delete
lpsz;
return
rtn ;
}
多位元組 unicode和utf 8的轉換
本來在網上能找到很多這方面的 但很多都是 且很多細節讓人理解起來很彆扭,估計有的 的也是不知所云。雖說就兩個windows api的呼叫,但只有自己去寫 測試研究,才真正領會了這些細節。文中注釋有寫的不當的歡迎指正。下面是我寫的測試程式 cpp view plain copy include std...
寬位元組 多位元組 mbstowcs wcstombs
函式 size t wcstombs char dest,const wchar t src,size t n wide character to a multibyten 被寫入到 str 中的最大位元組數 size t mbstowcs wchar t dest,const char src,s...
UTF 8與多位元組字串轉化
utf 8轉本地編碼以及本地編碼轉utf 8 寬字元字串轉多位元組字串 inline std string w2a const wchar t pwsztext int isizeinbytes widechartomultibyte cp acp,0,pwsztext,1 null,0 null ...