Vc下unicode和UTF8相互轉換

2021-08-04 08:51:12 字數 1386 閱讀 8142

在vc下使用sqlite資料庫時,由於sql語句使用utf8 編碼,而cstring 是unicode編碼。

一, utf8 轉 unicode

cstring utf8tounicode(char* utf8)

//轉為unicode

multibytetowidechar(cp_utf8,0,utf8,-1,pwtext,dwunicodelen);

//轉為cstring

strunicode.format(_t(「%s」),pwtext);

//清除記憶體

delete pwtext;

//返回轉換好的unicode字串

return strunicode;

}

二, unicode轉utf8

size_t cdgqdialog::g_f_wctou8(char * dest_str, const

wchar_t src_wchar)

if ( (src_wchar > 0x7f) && (src_wchar <= 0x7ff) )

if ( (src_wchar > 0x7ff) && (src_wchar <= 0xffff) )

if ( (src_wchar > 0xffff) && (src_wchar <= 0x1fffff) )

if ( (src_wchar > 0x1fffff) && (src_wchar <= 0x3ffffff) )

if ( (src_wchar > 0x3ffffff) && (src_wchar <= 0x7fffffff) )

return (size_t)-1; // 以上皆不滿足則為非法序列

}// 以下幾行析取寬位元組中的相應位, 並分組為utf-8編碼的各個位元組

tmp_wchar = src_wchar;

for (int i = count_bytes; i > 1; i–)

//這個時候i=1

//對utf-8第乙個位元組位處理,

//第乙個位元組的開頭」1」的數目就是整個串中位元組的數目

tmp_char = (unsigned

char)(tmp_wchar & byte_one);//根據上面附值得來,有效位個數

dest_str[0] = (tmp_char | utf_one);//根據上面附值得來1的個數

// 位值析取分組__end!

return count_bytes;

}int cdgqdialog::g_f_wcs_to_pchar(cstring& wstr,char * p)

三.轉換例項

void cmytestdlg::onbnclickedbutton2()

Vc下unicode和UTF8相互轉換

一,utf8 轉 unicode cstring utf8tounicode char utf8 dword dwunicodelen 轉換後unicode的長度 tchar pwtext 儲存unicode的指標 cstring strunicode 返回值 獲得轉換後的長度,並分配記憶體 dwu...

簡單聊下Unicode和UTF 8

今晚聽同事分享提到這個,簡單總結下。unicode字符集 unicode的出現是因為ascii等其他編碼碼不夠用了,比如ascii是英語為母語的人發明的,只要乙個位元組8位就能夠表示26個英文本母了,但是當跨區域進行資訊交流的時候,尤其是internet的出現,除了 a b c 還有 你 我 他 需...

unicode和utf8的關係

很久以前儲存的,別人寫的但是很明了 很久很久以前,有一群人,他們決定用8個可以開合的電晶體來組合成不同的狀態,以表示世界上的萬物。他們看到8個開關狀態是好的,於是他們把這稱為 位元組 再後來,他們又做了一些可以處理這些位元組的機器,機器開動了,可以用位元組來組合出很多狀態,狀態開始變來變去。他們看到...