1

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

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

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

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

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

非常感谢!

4

1 回答 1

1

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

请参阅此页面上的“支持 UTF-8 和 UTF-16”段落。

于 2012-06-29T14:54:07.763 回答