在ActiveDirectory和Sqlite3之间复制文本数据时出现C ++问题

时间:2012-06-29 14:10:04

标签: c++ utf-8 sqlite active-directory

我编写了一个C ++程序来从MS-Active Directory中检索一些文本数据并将它们保存到Sqlite3数据库中,但是我有一个问题,即utf-8编码。

根据一些读数,来自活动目录的数据是UTF-8编码的,但是当从C ++读取时,它将“宽字符”(wchar_t)视为Sqlite3(默认为utf-8)不接受为UTF -8因为它只在其“sqlite3_bind_text”的参数中使用“char”,除非我使用sqlite3_bind_text16,但我不希望这样做,因为它增加了数据库的大小。

我尝试转换为" wchar_t"到" char"使用函数" wcstombs_s",但结果数据不正确。

我读到唯一的方法是使用MultiByteToWideChar或WideCharToMultiByte,但我没有尝试,因为我读到转换成本非常昂贵。

我想知道你们中是否有人遇到类似的情况,并为此事找到了一个干净有效的解决方案。

非常感谢!

1 个答案:

答案 0 :(得分:1)

在使用UTF-8编码创建的数据库上使用sqlite3_bind_text16不会增加其大小,字符串会立即转换为UTF-8。

请参阅this page上的“支持UTF-8和UTF-16”。