简介
字符串编码转换封装函数,UTF-8编码与本地编码互转。
中文乱码的解决方法
有时候我们会遇到乱码的字符串,比如:
- 古文码
可能是用GBK方式读取UTF-8编码的中文导致的,用下面的Utf8ToLocal(string str)
函数转换一下就可以了。 - 口字码
可能是因为以UTF-8的方式读取GBK编码的中文导致的,用下面的LocalToUtf8(string str)
函数转换一下能搞定。
代码
//将UTF-8编码的字符串转换为本地编码
string Utf8ToLocal(string str)
{std::string result;WCHAR* strSrc;LPSTR szRes;//获得临时变量的大小int i = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0);strSrc = new WCHAR[i + 1];MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, strSrc, i);//获得临时变量的大小i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);szRes = new CHAR[i + 1];WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);result = szRes;delete[]strSrc;delete[]szRes;return result;
}
//将本地编码转换为UTF-8编码的字符串
string LocalToUtf8(string str)
{std::string result;WCHAR* strSrc;CHAR* szRes;int i;// 获得临时变量的大小 i = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);strSrc = new WCHAR[i + 1];MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, strSrc, i);// 获得临时变量的大小 i = WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, NULL, 0, NULL, NULL);szRes = new CHAR[i + 1];WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, szRes, i, NULL, NULL);result = szRes;delete[] strSrc;delete[] szRes;return result;
}