在vc++中通過sqlite3.dll介面對sqlite資料庫進行操作,包括開啟資料庫,插入,查詢資料庫等,如果操作介面輸入引數包含中文字元,會導致操作異常。例如呼叫sqlite3_open開啟資料庫檔案,如果檔案路徑出現中文,就會導致開啟失敗。sqlite3_exec執行sql語句,如果包含中文對應字元就會變成亂碼。這是由於sqlite資料庫使用的是utf-8編碼方式,而傳入的字串是ascii編碼或unicode編碼,導致字串格式錯誤。解決方案是在呼叫sqlite介面之前,先將字串轉換成utf-8編碼,以下提供各種字串編碼轉換函式。
[cpp]view plain
copy
//utf-8轉unicode
std::wstring utf82unicode(const
std::string& utf8string)
if(widesize == 0)
std::vector> resultstring(widesize);
intconvresult = ::multibytetowidechar(cp_utf8, 0, utf8string.c_str(), -1, &resultstring[0], widesize);
if(convresult != widesize)
return
std::wstring(&resultstring[0]);
} //unicode 轉為 ascii
string widebyte2acsi(wstring& wstrcode)
if(asciisize == 0)
std::vector> resultstring(asciisize);
intconvresult =::widechartomultibyte(cp_oemcp, 0, wstrcode.c_str(), -1, &resultstring[0], asciisize, null, null);
if(convresult != asciisize)
return
std::string(&resultstring[0]);
} //utf-8 轉 ascii
string utf_82ascii(string& strutf8code)
/////ascii 轉 unicode
wstring acsi2widebyte(string& strascii)
if(widesize == 0)
std::vector> resultstring(widesize);
intconvresult = multibytetowidechar (cp_acp, 0, (
char
*)strascii.c_str(), -1, &resultstring[0], widesize);
if(convresult != widesize)
return
std::wstring(&resultstring[0]);
} //unicode 轉 utf8
std::string unicode2utf8(const
std::wstring& widestring)
std::vector> resultstring(utf8size);
intconvresult = ::widechartomultibyte(cp_utf8, 0, widestring.c_str(), -1, &resultstring[0], utf8size, null, null);
if(convresult != utf8size)
return
std::string(&resultstring[0]);
} //ascii 轉 utf8
string ascii2utf_8(string& strasciicode)
JSF spring中文輸入亂碼問題解決方法
在inputtext中輸入中文,然後在輸出,顯示為亂碼。解決方法 我是使用的jsf spring2.0 hibernate3所以解決這個問題不是很複雜.在頁面上新增 xml page contenttype text html charset utf 8 主要是在工程web.xml中新增了sprin...
Linux Oracle 中文亂碼問題解決
一 若在oracle中有漢字,在資料庫中查詢出現亂碼很可能是由於資料庫客戶端與伺服器的字符集不一致導致的,這時就應該先分別檢視下資料庫伺服器和客戶端的字符集 具體命令如下 1.檢視伺服器端的字符集 sql select userenv language from dual 2.檢視客戶端的字符集 e...
putty中文亂碼問題解決
putty中文亂碼問題解決 用putty從windows xp連線ubuntu server或者freebsd系統,其中中文部分亂碼,經常遇到這個問題的時候,會覺得很鬱悶。現共享一些解決這個問題的方法。方法一 如果經常使用,把這些設定儲存在session裡面.儲存方法 再做完以上操作的同時選中以下兩...