本帖最后由 oloveuxyz 于 2011-01-13 12:17:39 编辑

解决方案 »

  1.   

    MultiByteToWideChar(CP_UTF8,WideCharToMultiByte(CP_ACP
      

  2.   

    做编码转化,WideCharToMultiByte/MultiByteToWideChar();
      

  3.   

    直接加载sqlite3.c和sqlite3.h不就行了么?
    我就是这么直接使用的,没见不行啊
      

  4.   


    //***************Ansi转化为UTF-8*******************//
    int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szSrc, strlen(szSrc), NULL, 0);
    //分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
    wchar_t* wszString = new wchar_t[wcsLen + 1];
    //转换
    ::MultiByteToWideChar(CP_ACP, NULL, szSrc, strlen(szSrc), wszString, wcsLen);
    //最后加上'\0'
    wszString[wcsLen] = '\0';

    int u8Len = ::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
    //同上,分配空间要给'\0'留个空间
    //UTF8虽然是Unicode的压缩形式,但也是多字节字符串,所以可以以char的形式保存
    char* szU8 = new char[u8Len + 1];
    //转换
    //unicode版对应的strlen是wcslen
    ::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), szU8, u8Len, NULL, NULL);
      

  5.   

    sqlite3_open只有这个需要UTF-8
    其它的都无所谓
      

  6.   

    Vc里使用UTF8很复杂,很难吗?或者说VC使用utf8有哪些不方便的地方?
    ----------------------------------------------------------
    那得看具体情况了。首先,你得清楚VC中Ansi、Unicode、UTF8编码的编码方式:
    Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件 
    Unicode字符串,每个字符(汉字、英文字母)都占2个字节,以2个连续的\0结尾,而UTF8是Unicode一种压缩形式,比如英文A在unicode中表示为0x0041,但这种存储方式太浪费,因为浪费了50%的空间,于是就把英文压缩成1个字节,成了utf8编码,但是汉字在utf8中占3个字节,显然用做中文不如ansi合算例如对文本进行读写操作的时候,就得看文本内容是英文还是中文,或者中英文等,根据不同编码对中英字符所占长度的不同,选择不同的编码。当然,现如今,你也不必非要考虑这些细节问题
      

  7.   

    sqlite好像只支持UTF8格式编码吧
      

  8.   

    好像只
    sqlite3_open  需要UTF-8吧
      

  9.   

    UTF-8大了可不是一点半点
    嵌入式的DBMS呢