我目前正在使用sqlite和c ++构建一个经理游戏。我已经找到了几乎涵盖了创建游戏所需的每个领域的教程,但是一个小问题一直困扰着我。
当我在c ++中编写一个字符串,例如“AndreasKlöden”并使用sqlite语句将数据插入我的sqlite数据库时,umlautö中的特殊字符丢失,这适用于许多欧洲名称,如Léfevre,Würth等
我已经搜索了答案,似乎c ++字符串在ANSII中或类似的东西。不知怎的,我应该编写unicode字符串,以避免下面显示的问题:
http://imageshack.dk//viewimage.php?file=/imagesfree/0Ej53884.png
有没有人知道如何用c ++编写unicode字符串,这样我可以从sqlite DB导出/导入正确的数据?
答案 0 :(得分: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
等
答案 1 :(得分:-1)
CppSqlite3U的开发目的是成为sqlite3的包装器,它不支持UNICODE。 CppSqlite3U可用作UNICODE调用的前端。