2010-11-01 33 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