代码之家  ›  专栏  ›  技术社区  ›  Marc Bernier

sqlite字符转换

  •  1
  • Marc Bernier  · 技术社区  · 15 年前

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

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

    H·AGEN-DAZS

    (第一个A上面有两个点)。我通过ADO读取这个字段,并将它从BSTR转换为char*,然后将它绑定到一个sqlite insert语句。当我在sqlitespy(和其他工具)中查看这个字段时,我看到该字段显示为“h_?.5 agen-daz”。

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

    我已经在调试器中确认,此时,文本_u是“h_ agen-dazs”,而a实际上是字符0xc4。

    你有什么想法吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Ned Batchelder    15 年前

    对于_,0xC4不是UTF-8。它是isolatin-1(也称为8859-1),意为“_”,也就是说它是(某种程度上)utf-16:u00c4。UTF-8编码是0xc3 0x84,两个字节。