1. 程式人生 > >在使用DelphiXE3和SQLite3進行程式開發時,解決最後一個字元亂碼的問題

在使用DelphiXE3和SQLite3進行程式開發時,解決最後一個字元亂碼的問題

在使用DelphiXE3和SQLite3進行程式開發時,如果使用原版的SQLiteTable3,當使用UTF8Decode函式之後,可能依然存在亂碼問題,一個表現就是,最後一個漢字顯示為框,後面跟一個問號,其他的漢字解碼正常。

後來跟蹤了一下SQLiteTable3的原始碼,從SQLite獲取的字串資料是正確的,但是因為TSQLiteTable的建構函式在讀取SQLite返回的UTF8字串時使用了setstring函式,強行將資料欄位進行了轉換,引起字串長度出現錯誤,所以在UTF8Decode解碼時出現了漏解碼的問題。

這裡給出一種解決方案,修復了該Bug。

1.將TSQLiteTable的建構函式Create中的setstring行改為:

      Var

         strStr: String;
         strValue: PWideChar;      

      //****************************************

      strStr := UTF8Decode(AnsiString(ptrValue));

      strValue := PWideChar(strStr);
      setstring(thisStringValue^, strValue, strlen(strValue));

因為在delphixe3中,setstring函式的第二個引數是PChar,也就是PWideChar型別。

2.在面在呼叫時,不需要再UTF8Decode解碼