2010-11-01 67 views
1

我已經編寫了一個將SQL Server錶轉換爲SQLite表的程序。這是一個使用ADO(COM)從SQL Server檢索數據的C++程序,以及C SQLite接口(由我自己的C++類包裝)。SQLite字符轉換

在SQL Server中,我有一個有內容的字段的記錄:

哈根達斯

(即第一個具有兩個點以上的話)。我通過ADO讀取該字段,並將其從BSTR轉換爲char *,然後將其綁定到SQLite INSERT語句。當我在SQLiteSpy(和其他工具)中查看這個字段時,我看到該字段顯示爲'HAGEN DAZS'。

在調試器中,我可以看到Ä是字符0xc4,這是該字符的正確UTF-8表示形式。看來,SQLite是重整我的 'A'

這是我的SQLite CREATE TABLE語句:

CREATE TABLE Company ([Lookup] CHAR (30)) 

這是我的SQLite的INSERT語句:

INSERT INTO Company ([Lookup]) VALUES (?) 

我從所提供的BSTR轉換ADO轉換爲char *使用此函數調用:

WideCharToMultiByte(CP_ACP,0,In_,-1,Out_,MaxLen_,0,0); 

這是我的SQLite綁定語句:

sqlite3_bind_text(Statement,1,Text_,-1, (BindFunction) SQLITE_TRANSIENT); 

我在,在這一點上,Text_是「哈根達斯」,而A字真的在0xc4證實調試。

關於這裏發生了什麼的任何想法?

回答

3

對於Ä,0xC4不是utf-8。它是Ä的isolatin-1(也被稱爲8859-1),這意味着它也是(有點)utf-16:u00C4。 utf-8編碼是0xC3 0x84,兩個字節。

+0

你是對的,我沒有注意到我的圖表上的X84。 – 2010-11-01 19:57:25