C++使用sqlite時,中文字符顯示亂碼問題

字符串轉換時須要先將ANSI轉換成UTF8,在字符串前面加L,即L「個人字符串」;sql

再利用Unicode 轉 Utf8 函數:數據庫

std::string Unicode2Utf8(const std::wstring& widestring)
{
    int utf8size = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL);
    if (utf8size == 0)
    {
        throw std::exception("Error in conversion.");
    }
    std::vector<char> resultstring(utf8size);
    int convresult = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, &resultstring[0], utf8size, NULL, NULL);
    if (convresult != utf8size)
    {
        throw std::exception("La falla!");
    }
    return std::string(&resultstring[0]);
}

主函數使用:ide

int main()
{
open_db();
    //create_table();
    //drop_table();
    insert_data(00010, "minda", const_cast<char *>(Unicode2Utf8(_T("測測測測測")).c_str()));
    //insert_data(9,"minda","測測測測測");
    //insert_data(2, "yuan", "測測測");
    //insert_data(7, "www","chifan");
    //search_data(1);
    search_data("minda");
    delete_data("yuan");
    system("pause");
    return 0;
}

數據庫的使用及上面幾個函數(open_db,create_table等函數)的定義,在上一篇博客中有詳細給出,參看對應網址中的代碼便可,拷貝便可使用
遇到幾個問題,具體警告不記得了,如下的方法能夠都試試:
解決方法以下:項目屬性中---->C++ -------> 預處理器 ------------> 預處理器定義 ----------> 加一個_X86_
函數

另一個問題是:sqlite3.c 編譯不過
解決方法:不使用預編譯頭
.net

從sqlite中輸出中文時,一直顯示不對,緣由一是格式問題:UTF8先要轉換成unicode類型3d

std::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;
}

另外一個大坑就是最後使用wcout輸出,控制檯一直沒有內容,緣由就在wcout這個函數上面,具體緣由能夠參看此篇博客 https://blog.csdn.net/querw/article/details/6690954
可是這篇博客中給出的方法不能用(是我技術渣不會用),後來找的一個方法,能夠正確輸出中文,只需在輸出時添加兩句話,而且須要包含頭文件 #include
code

這樣最終就能正常顯示拉~
sqlite

相關文章
相關標籤/搜索