sqlite中文乱码问题原因分析及解决

随心笔谈9个月前发布 admin
200 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了几个C++函数,用于在UTF-8、Unicode和ASCII编码之间进行转换。这些函数包括: 1. **Utf82Unicode**:将UTF-8编码的字符串转换为Unicode wide string。2. **WideByte2AcsI**:将Unicode字符串转换为ASCII字符串。3. **UTF_82ASCII**:通过先将UTF-8编码转换为Unicode,再将其转换为ASCII字符串。4. **AcsI2WideByte**:将ASCII字符串转换为Unicode。5. **Unicode2Utf8**:将Unicode字符串转换为UTF-8编码的字符串。6. **ASCII2Utf8**:通过先将ASCII字符串转换为Unicode,再将其转换为UTF-8编码的字符串。 这些函数的核心内容是字符编码之间的转换过程,特别关注了不同编码格式之间的转换机制和实现细节。文章通过具体的代码示例展示了如何在C++中实现这些字符编码的转换,提供了对字符编码转换的深入理解。

//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 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 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 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 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;

}

© 版权声明

相关文章