c++ - sqlite3中使用汉字

标签 c++ sqlite visual-studio-2005 windows-ce

我来自中国,我有一个关于sqlite的问题,但是我的英语有点差。我会尽力清楚地表达自己的意思。

最近,我在sqlite中使用Visual Studio 2005(VC++)进行WinCE开发,使用了sqlite数据库。在我的表中,一个字段包含一些汉字。当我显示这些时,我没有得到我想要的,因为它们都是奇怪的字符。

我使用了我想要的函数的返回列值,但我不能。

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
// or
const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);

他们说sqlite3中的编码是utf8,所以你需要将其转换为unicode。我尝试使用在互联网上找到的一个函数来完成这项工作,如下所示:

wstring UTF8ToUnicode(const string& strin)
{
    wstring strOut;
    int dwNum = MultiByteToWideChar(CP_UTF8,0,strin.c_str(),-1,0,0)
    wchar_t* pBuffer = new wchar_t[dwNum];
    if (!pBuffer){return strOut;}
    memset(pBuffer,0,dwNum*sizeof(wchar_t));
    if (MultiByteToWideChar(CP_UTF8,0,strin.c_str(),-1,pBuffer,dwNum)>=0)
    {
        strOut= pBuffer;
    }
    delete[] pBuffer;
    return strOut;
}

最佳答案

“他们说sqlite3中的编码是utf8”

这句话谁说的都是错的。使用的编码取决于数据库的打开方式。

“如果调用 sqlite3_open() 或 sqlite3_open_v2(),则数据库的默认编码将为 UTF-8;如果使用 sqlite3_open16(),则数据库的默认编码将为 native 字节顺序的 UTF-16。”

http://sqlite.org/c3ref/open.html

但是,这并不重要。但是,存储的数据 sqlite3_column_text() 将始终返回 UTF8,而 sqlite3_column_text16() 将始终以 native 字节顺序返回 UTF16。您不需要编写自己的转换代码。唯一的区别是效率 - 无需转换即可提取存储的数据,速度稍快一些。

关于c++ - sqlite3中使用汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8574055/

相关文章:

c++ - 错误 : expected identifier before '=' token

sqlite - 使用 SQLite In Memory 配置测试 NHibernate 时,如何创建另一个数据库?

c# - 在 ASP.NET 中创建 default.aspx.designer.cs 文件

c# - 有没有办法检查是否所有定义的函数都被调用?

visual-studio - 使用单个输出文件创建安装项目 (Visual Studio 2005)

c++ - 您如何在团队环境中管理大型 C++ 依赖项?

c++ - 如何获取有关域 .NET C++ 的信息

c++ 检查 TCP 窗口是否已满?

ruby-on-rails - 使用 AR 纠正 Postgres 和 SQLite3 中以 nil 值排序日期时的不同行为

.net - 无法确定类型为 'System.Data.SQLite.SQLiteFactory' 的提供程序工厂的提供程序名称。使用 Nuget 包版本 1.0.94.1