Qt的QString使用起來非常方便,內部封裝了很多很好用的函式和功能。其中有個函式是simplified(), 這個函式可以除去字串的首尾和內部的空白(空白包括\t,\n,\v,\f,\r,'')。其中Qt幫助文件中說的是移除的ASCII中的\t,\n,\v,\f,\r,''。這裡隱藏著一個坑。如果字串不是完全的ASCII字串,那麼該函式替換上面字元後會改變原字串的意思。
例如,如果char test[]="this is 張三全". QString(test).simplified()處理之後就會改變test的字串意思。
發現過程主要是在進行資料庫操作的過程中,欄位內容包含中文,使用該函式處理後會出現錯誤。
另外,Qt的sql模組進行資料庫操作時,如果操作的欄位中包含中文,也會出現類似的操作,導致讀寫的欄位出現錯誤。