寬位元組UTF 8 多位元組互轉

2022-09-10 23:51:37 字數 1798 閱讀 5862

在進行windows程式設計時,常常遇到不同字元編碼之間的轉換以對應不同的輸出格式,本文介紹寬位元組utf-8編碼格式和多位元組之間的專案轉換。分別呼叫windows底層函式multibytetowidechar和  widechartomultibyte實現。

1.utf-8轉多位元組

std::string u82mb(const

char*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(const

char*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 ...