麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > SQLite > 正文

sqlite中文亂碼問題原因分析及解決

2020-01-31 15:12:37
字體:
來源:轉載
供稿:網(wǎng)友
在VC++中通過sqlite3.dll接口對sqlite數(shù)據(jù)庫進行操作,包括打開數(shù)據(jù)庫,插入,查詢數(shù)據(jù)庫等,如果操作接口輸入?yún)?shù)包含中文字符,會導致操作異常。例如調(diào)用sqlite3_open打開數(shù)據(jù)庫文件,如果文件路徑出現(xiàn)中文,就會導致打開失敗。sqlite3_exec執(zhí)行sql語句,如果包含中文對應字符就會變成亂碼。

這是由于sqlite數(shù)據(jù)庫使用的是UTF-8編碼方式,而傳入的字符串是ASCII編碼或Unicode編碼,導致字符串格式錯誤。解決方案是在調(diào)用sqlite接口之前,先將字符串轉換成UTF-8編碼,以下提供各種字符串編碼轉換函數(shù)。
復制代碼 代碼如下:

//UTF-8轉Unicode
std::wstring Utf82Unicode(const std::string& utf8string)
{
int widesize = ::MultiByteToWideChar(CP_UTF8, 0, utf8string.c_str(), -1, NULL, 0);
if (widesize == ERROR_NO_UNICODE_TRANSLATION)
{
throw std::exception("Invalid UTF-8 sequence.");
}
if (widesize == 0)
{
throw std::exception("Error in conversion.");
}
std::vector<wchar_t> resultstring(widesize);
int convresult = ::MultiByteToWideChar(CP_UTF8, 0, utf8string.c_str(), -1, &resultstring[0], widesize);
if (convresult != widesize)
{
throw std::exception("La falla!");
}
return std::wstring(&resultstring[0]);
}
//unicode 轉為 ascii
string WideByte2Acsi(wstring& wstrcode)
{
int asciisize = ::WideCharToMultiByte(CP_OEMCP, 0, wstrcode.c_str(), -1, NULL, 0, NULL, NULL);
if (asciisize == ERROR_NO_UNICODE_TRANSLATION)
{
throw std::exception("Invalid UTF-8 sequence.");
}
if (asciisize == 0)
{
throw std::exception("Error in conversion.");
}
std::vector<char> resultstring(asciisize);
int convresult =::WideCharToMultiByte(CP_OEMCP, 0, wstrcode.c_str(), -1, &resultstring[0], asciisize, NULL, NULL);
if (convresult != asciisize)
{
throw std::exception("La falla!");
}
return std::string(&resultstring[0]);
}
//utf-8 轉 ascii
string UTF_82ASCII(string& strUtf8Code)
{
string strRet("");
//先把 utf8 轉為 unicode
wstring wstr = Utf82Unicode(strUtf8Code);
//最后把 unicode 轉為 ascii
strRet = WideByte2Acsi(wstr);
return strRet;
}
///////////////////////////////////////////////////////////////////////
//ascii 轉 Unicode
wstring Acsi2WideByte(string& strascii)
{
int widesize = MultiByteToWideChar (CP_ACP, 0, (char*)strascii.c_str(), -1, NULL, 0);
if (widesize == ERROR_NO_UNICODE_TRANSLATION)
{
throw std::exception("Invalid UTF-8 sequence.");
}
if (widesize == 0)
{
throw std::exception("Error in conversion.");
}
std::vector<wchar_t> resultstring(widesize);
int convresult = MultiByteToWideChar (CP_ACP, 0, (char*)strascii.c_str(), -1, &resultstring[0], widesize);
if (convresult != widesize)
{
throw std::exception("La falla!");
}
return std::wstring(&resultstring[0]);
}
//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]);
}
//ascii 轉 Utf8
string ASCII2UTF_8(string& strAsciiCode)
{
string strRet("");
//先把 ascii 轉為 unicode
wstring wstr = Acsi2WideByte(strAsciiCode);
//最后把 unicode 轉為 utf8
strRet = Unicode2Utf8(wstr);
return strRet;
}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: av在线免费看网站 | 久久精品av | 欧美 日韩 亚洲 中文 | 美女网站黄在线观看 | 国产1区2区3区在线观看 | 国产精品自拍99 | 视频在线中文字幕 | 羞羞答答视频 | 国产成人精品区 | 911视频免费版 | 娇妻被各种姿势c到高潮小说 | 国产一级二级在线播放 | 亚洲精品aⅴ中文字幕乱码 欧美囗交 | 成人精品一区二区三区中文字幕 | 精品成人av一区二区在线播放 | 国产精品久久久久久久四虎电影 | 亚洲影视中文字幕 | 99热1 | 亚洲精品久久久久久久久久 | 综合毛片 | 在线免费观看毛片视频 | 国产乱乱视频 | 欧美成人精品一区二区 | 九九午夜 | 欧美一级毛片一级毛片 | 精品午夜影院 | 国产黄色录像片 | 九九热久久免费视频 | 蜜桃传媒视频麻豆第一区免费观看 | 黄色片网站在线免费观看 | 一级在线视频 | 亚洲91精品| 九色com | 少妇一级淫片免费放播放 | 久久精品a一级国产免视看成人 | 婷婷久久影院 | 亚洲一区 国产 | 宅男噜噜噜66一区二区 | 久久亚洲一区二区三区成人国产 | 欧美成人影院 | 亚洲成人黄色片 |