5

我目前正在使用 sqlite 和 c++ 构建经理游戏。我找到了几乎涵盖了创建我的游戏所需的所有领域的教程,但一个小问题一直困扰着我多年。

当我在 C++ 中编写一个字符串(例如“Andreas Klöden”)并将其与 sqlite 语句一起用于在我的 sqlite DB 中插入数据时,带有变音符号 ö 的特殊字符会丢失,这适用于许多欧洲名称,如 Léfevre、Würth 等。

我已经搜索了一个答案,似乎 c++ 字符串在 ANSII 或类似的东西中。我应该以某种方式编写 unicode 字符串,以避免出现如下所示的问题:

http://imageshack.dk//viewimage.php?file=/imagesfree/0Ej53884.png

有谁知道如何在 c++ 中编写 unicode 字符串,以便我可以从 sqlite DB 导出/导入正确的数据?

4

2 回答 2

4

SQLite “支持” UTF-8(引号在这里是因为基本上 UTF8 只使用 ASCII 字符,所以实际上没有什么可以“支持”)。所以最好的(也是向后兼容的)方法之一是使用 UTF-8 编码。SQLite 中的 wchar_t 支持也存在,但使用它的原因只有一个:如果您的代码已经依赖于 wchar_t。

如果“UTF-8”不是一个熟悉的主题,请阅读:http: //www.joelonsoftware.com/articles/Unicode.html

对 C API 的调用

sqlite_exec(db_conn, "insert somevalue into sometable values(\"utf encoded string\""), NULL, NULL, "error");

会做的工作。

如果您必须仅支持有限数量的代码页或使用 ICU 库获得全面支持,则可以手动完成实际转换。还有像http://utfcpp.sourceforge.net/这样的库

CodeProject 还有很多 UTF-8 示例代码:

http://www.codeproject.com/Articles/14637/UTF-8-With-C-in-a-Portable-Way

http://www.codeproject.com/Articles/5281/UTF-8-Encoding-and-Decoding

等等

于 2012-05-12T20:32:28.347 回答
-1

CppSqlite3U 的开发目的是作为 sqlite3 的包装器,它不支持 UNICODE。CppSqlite3U可以用作您的 UNICODE 调用的前端。

于 2016-02-21T17:12:06.497 回答