c++ - SQLite 字符转换

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

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

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

哈根达斯

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

在调试器中,我可以看到 Ä 是字符 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。

关于这里发生的事情有什么想法吗?

最佳答案

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

关于c++ - SQLite 字符转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4070349/

相关文章:

c++ - GCC 使用 __stdcall 编译一个 dll

mysql - 使用 SSIS 将 50 多个表从 MySQL 导入到 SQL Server

python - 清理 SQLite 输入

c++ - 标准模板字符串类 : string. fill()

c++ - 被释放的指针没有分配,但看起来是

sql - 如何加密 SQL Server 2008 数据库

sql-server - SQL Server : why are there no rows found?

sqlite - sqlite R*TREE 自底向上解析

SQL插入行并递增其他行

c++ - 在 if 语句中使用它