解決SQLite資料庫中文亂碼問題

2021-06-27 05:09:29 字數 2757 閱讀 8417

關於sqlite中出現中文亂碼的分析以及解決方案

我們在使用sqlite資料庫時候,可能會發現,向資料庫插入資料時候顯示的是漢字,但通過sqlite讀出來時卻顯示的亂碼,這是因為sqlite資料庫所支援的編碼方式和我們程式中的編碼方式不一樣,sqlite資料庫採用的是utf-8編碼方式,而我們在程式中常常使用的是寬位元組uncoid編碼方式,所以使用sqlite資料庫讀出來以後會顯示亂碼,就是因為編碼方式不一樣,舉個例子,基於對話方塊的程式,我們要在listctrl控制項上顯示我們資料庫中讀入的資料,當我們編寫程式讓讀出來時,列表控制項上顯示的卻是不可讀的亂碼,這就是原因所在。

例如在vc++中通過sqlite3.dll介面對sqlite資料庫進行操作,包括開啟資料庫,插入,查詢資料庫等,如果操作介面輸入引數包含中文字元,會導致操作異常。例如呼叫sqlite3_open開啟資料庫檔案,如果檔案路徑出現中文,就會導致開啟失敗。sqlite3_exec執行sql語句,如果包含中文對應字元就會變成亂碼。

有問題肯定是要解決滴,本人初學sqlite,通過查詢資料,這是由於sqlite資料庫使用的是utf-8編碼方式,而傳入的字串是ascii編碼或unicode編碼,導致字串格式錯誤。解決方案是在呼叫sqlite介面之前,先將字串轉換成utf-8編碼,以下提供各種字串編碼轉換函式。。函式如下:

一般我們使用vc++程式設計時最多使用的函式是

utf-8轉unicode ,一下函式僅供參考

//utf-8轉unicode 

std::wstring utf82unicode(const std::string& utf8string)

if (widesize == 0)

std::vectorresultstring(widesize);

int convresult = ::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::vectorresultstring(asciisize);

int convresult =::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::vectorresultstring(widesize);

int convresult = 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::vectorresultstring(utf8size);

int convresult = ::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)

解決資料庫中文亂碼或者?

使用記事本開啟mysql安裝目錄下的 my.ini 檔案.檢視default character set是否為utf 8 1.資料庫中輸入下列語句進行查詢 2.設定字符集 set character set database utf8 set character set server utf8 se...

解決資料庫儲存中文亂碼問題

輸入中文時資料庫中顯示為亂碼,提供以下兩種解決方案 1.修改字段型別 varchar是採用單位元組存數 nvarchar採用的是unico編碼,儲存兩個位元組 乙個英文本母存varchar格式,佔乙個位元組 存nvarchar佔2個位元組。varchar也可以儲存中文,如果系統不支援中文,就會出現亂...

解決oracle資料庫中文亂碼問題

中文亂碼問題解決 1.檢視伺服器端編碼 select userenv language from dual 我實際查到的結果為 american america.zhs16gbk 2.執行語句 select from v nls parameters 檢視第一行中parameter項中為nls la...