2016-12-14 83 views
2

非英語文本我們有寫入到一個SQLite數據庫和C#應用程序從數據庫中讀取舊MFC C++應用程序。閱讀非Unicode,從SQLite數據庫

C++應用程序在俄語Windows計算機的數據庫中寫入「шагпотокаработы」(西里爾文字符)。

當同樣的C++應用程序讀取它西歐(拉丁)Windows電腦上,它把它讀成「OAAïîòîêàðàáîòû」(拉丁文表示)。

當C#應用程序讀取它時,它將其讀爲「Unicode」(Unicode表示形式)。

這些應用中的無specifiy在數據庫中的編碼類型。我想閱讀C#中的原文。

我找不到閱讀文本時指定的編碼類型有道。

我已經嘗試過連接字符串,如Data Source=c:\mydb.db;Version=3;UTF8Encoding=True;,但目前爲止沒有運氣。

此外,我試圖從「 」獲取字節數組並轉換爲西里爾文,但失敗了。

有誰碰巧知道如何從SQLite數據庫讀取原來的俄文本回來?

回答

4

所有SQLite的C API使用UTF-8的正常功能。 C#SQLite驅動程序會自動在UTF-8和C#字符串編碼之間進行轉換。

如果您沒有從您的C#程序中獲取正確的數據,那麼C++應用程序可能實際上並未實際使用UTF-8。這一點由C++應用程序在不同代碼頁中給出不同結果的事實所證實。

如果可能,修復C++應用程序,或將數據庫中的數據從原始編碼轉換爲UTF-8。作爲最後的手段,您可以更改C#應用程序以將所有字符串讀爲blob,然後將它們從原始編碼轉換爲UTF-8。 (在任何情況下,你需要知道原來的編碼是什麼。)

+0

正如我所說的,這將是最後的手段。你應該首先使用正確的編碼。 –