在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個開關狀態是好的,於是他們把這稱為 位元組 再後來,他們又做了一些可以處理這些位元組的機器,機器開動了,可以用位元組來組合出很多狀態,狀態開始變來變去。他們看到...