日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++中关于SQLite中文乱码的解决方法

發布時間:2023/12/18 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中关于SQLite中文乱码的解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在使用SQLite的過程中(c++),如果創建一個表,如果SQL語句中包含中文字符,就會報錯;如果是從數據庫表中查詢數據,如果數據庫表中的某些字段為中文,查詢結果也不能正常顯示,出現這種情況的原因是因為SQLite的編碼與工程的編碼不一致造成的。

Sqlite的編碼默認為UTF-8編碼,而vc++工程中所編寫的SQL語句,可能是Unciode或者ASCII碼,特別是ASCII碼,如果不進行轉換,寫入數據庫以及從數據庫中讀出的數,都會是亂碼(只針對中文字符),因此,本文主要寫一下各種編碼下的編碼轉換:

  • <pre class="cpp" name="code">//將ASCII碼轉換為UTF8編碼

  • void ASCIIToUTF8(char cACSII[] , char cUTF8[] )

  • {

  • //先將ASCII碼轉換為Unicode編碼

  • int nlen= MultiByteToWideChar(CP_ACP,0,cACSII,-1,NULL,NULL);

  • wchar_t *pUnicode = new wchar_t[SQL_MAX_LENTH];

  • memset(pUnicode,0,nlen*sizeof(wchar_t));

  • MultiByteToWideChar(CP_ACP,0,cACSII,-1,(LPWSTR)pUnicode,nlen);

  • wstring wsUnicode = pUnicode ;

  • //將Unicode編碼轉換為UTF-8編碼

  • nlen = WideCharToMultiByte(CP_UTF8,0,wsUnicode.c_str(),-1,NULL,0,NULL,NULL);

  • WideCharToMultiByte(CP_UTF8,0,wsUnicode.c_str(),-1,cUTF8,nlen,NULL,NULL);

  • }

  • ?

  • //將UTF-8編碼轉換為ASCII編碼

  • void UTF8ToASCII(char *cUTF8 , char ASCII[])

  • {

  • string str = cUTF8 ;

  • //先將UTF8編碼轉換為Unicode編碼

  • int nLen = MultiByteToWideChar(CP_UTF8,0,str.c_str(),-1,NULL,0);

  • wchar_t *pwcUnicode = new wchar_t[nLen] ;

  • memset(pwcUnicode,0,nLen*sizeof(wchar_t));

  • MultiByteToWideChar(CP_UTF8,0,str.c_str(),-1,(LPWSTR)pwcUnicode,nLen);

  • //將Unicode編碼轉換為ASCII編碼

  • nLen = WideCharToMultiByte(CP_ACP,0,pwcUnicode,-1,NULL,0,NULL,NULL);

  • WideCharToMultiByte(CP_ACP,0,pwcUnicode,-1,ASCII,nLen,NULL,NULL);

  • }

  • ?

  • //將ASCII編碼轉換為Unicode編碼

  • void ASCIIToUnicode(char cASCII[],wchar_t wcUnicode[])

  • {

  • int nlen= MultiByteToWideChar(CP_ACP,0,cASCII,-1,NULL,NULL);

  • MultiByteToWideChar(CP_ACP,0,cASCII,-1,(LPWSTR)wcUnicode,nlen);

  • }

  • ?

  • //將Unicode編碼轉換為UTF-8編碼

  • void UnicodeToUTF8(wchar_t wcUnicode[] , char cUTF8[] )

  • {

  • wstring wsUnicode = wcUnicode ;

  • int nLen = WideCharToMultiByte(CP_UTF8,0,wsUnicode.c_str(),-1,NULL,0,NULL,NULL);

  • WideCharToMultiByte(CP_UTF8,0,wsUnicode.c_str(),-1,cUTF8,nLen,NULL,NULL);

  • }

  • ?

  • //將UTF-8編碼轉換為Unicode編碼

  • void UTF8ToUnicode(char *cUTF8 , wchar_t wcUnicode[])

  • {

  • string sUTF8 = cUTF8 ;

  • int nLen = MultiByteToWideChar(CP_UTF8,0,sUTF8.c_str(),-1,NULL,0);

  • MultiByteToWideChar(CP_UTF8,0,sUTF8.c_str(),-1,(LPWSTR)wcUnicode,nLen);

  • }

  • //將Unicode編碼轉換為ASCII編碼

  • void UnicodeToUTF8(wchar_t wcUnicode[],char cASCII[])

  • {

  • int nLen = WideCharToMultiByte(CP_ACP,0,wcUnicode,-1,NULL,0,NULL,NULL);

  • WideCharToMultiByte(CP_ACP,0,wcUnicode,-1,cASCII,nLen,NULL,NULL);

  • }

  • 總結

    以上是生活随笔為你收集整理的c++中关于SQLite中文乱码的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。