QSQLITE中文亂碼問題解決方法

2021-06-07 12:39:54 字數 949 閱讀 1402

在網上蒐羅qsqlite中文亂碼問題的解決方法,都是說通過qtextcodec呼叫setcodecforcstrings顯式設定編碼來解決,不知道他們有沒有親自嘗試,還是他們的使用環境與我不同,我都一一嘗試無一成功。最後通過檢視qt關於qsqlite的原始碼終於讓我解決自己遇到的問題。

首先說一下,我遇到qsqlite中文亂碼問題產生的原因。

我所訪問的sqlite資料庫是通過另乙個程式生成,經過分析該程式在將中文插入到資料庫時採用的gbk編碼,並沒有轉換成utf8格式就儲存到sqlite中,由於sqlite儲存文字使用的是utf8格式,在使用qt提供的qsqldatabase訪問sqlite資料庫時便會發生亂碼。由於這個生成sqlite資料庫的程式沒有源**,因而無法更改,只得從qsqldatabase對sqlite訪問的源**下手。最後終於在src/sqldrivers/sqlite/qsql_sqlite.cpp中找到了解決辦法。解決措施如下:

將該檔案fetchnext函式中values[i+idx] = qstring(reinterpret_cast(

sqlite3_column_text16(stmt, i)),

sqlite3_column_bytes16(stmt, i) / sizeof(qchar));

更改為:

values[i+idx] = qstring::fromascii(reinterpret_cast(

sqlite3_column_text(stmt, i)),

sqlite3_column_bytes(stmt, i));

重新編譯qsqlite外掛程式。

然後在使用qsqlquery進行查詢前,使用qtextcodec的setcodecforcstrings函式設定編碼格式為gbk。

重新編譯程式,中文亂碼問題便解決了。

Linux Oracle 中文亂碼問題解決

一 若在oracle中有漢字,在資料庫中查詢出現亂碼很可能是由於資料庫客戶端與伺服器的字符集不一致導致的,這時就應該先分別檢視下資料庫伺服器和客戶端的字符集 具體命令如下 1.檢視伺服器端的字符集 sql select userenv language from dual 2.檢視客戶端的字符集 e...

putty中文亂碼問題解決

putty中文亂碼問題解決 用putty從windows xp連線ubuntu server或者freebsd系統,其中中文部分亂碼,經常遇到這個問題的時候,會覺得很鬱悶。現共享一些解決這個問題的方法。方法一 如果經常使用,把這些設定儲存在session裡面.儲存方法 再做完以上操作的同時選中以下兩...

GIT中文亂碼問題解決

進入git安裝目錄,改一下配置就可以基本解決 1 etc gitconfig gui encoding utf 8 i18n commitencoding utf 8 svn pathnameencoding utf 8說明 開啟 git 環境中的中文支援。pathnameencoding設定了檔案...