SQLite字符转换

时间:2010-11-01 15:33:23

标签: c++ sql-server sqlite unicode character-encoding

我编写了一个将SQL Server表转换为SQLite表的程序。这是一个使用ADO(COM)从SQL Server和C SQLite接口检索数据的C ++程序(由我自己的C ++类包装)。

在SQL Server中,我有一个包含内容字段的记录:

哈根达斯

(第一个A有两个点)。我通过ADO读取此字段并将其从BSTR转换为char *,然后将其绑定到SQLite INSERT语句。当我在SQLiteSpy(以及其他工具)中查看此字段时,我看到该字段显示为“H AGENDAZS”。

在调试器中,我可以看到Ä是字符0xc4,这是该字符的正确UTF-8表示。似乎SQLite正在破坏我的'Ä'

这是我的SQLite CREATE TABLE语句:

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

这是我的SQLite INSERT语句:

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

我使用此函数调用将ADO提供的BSTR转换为char *:

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

这是我的SQLite Bind声明:

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

我已经在调试器中确认,此时Text_是“HÄAGEN-DAZS”,而A实际上是字符0xc4。

关于这里发生了什么的任何想法?

1 个答案:

答案 0 :(得分:3)

对于Ä,

0xC4不是utf-8。对于Ä,它是isolatin-1(也称为8859-1),这意味着它也是(某种)utf-16:u00C4。 utf-8编码是0xC3 0x84,两个字节。