C++求解6
本帖最后由 隐藏英雄 于 2022-12-29 17:56 编辑我使用zip和unzip类进行解压,可以成功解压 但是会出现解压中文乱码和失败问题,谁有什么好的MFC C++ 解压方法和代码吗,分享一下,下面是找到的一个号称修复了中文乱码问题的文件 可是他这个文件本身就报错了
str未定义
文件下载地址 https://pan.baidu.com/s/1dH1sgZehG2Tb_2EZ-pdF8Q?pwd=dxek 提取码dxek
char *tchar_to_utf8(const TCHAR *str, char szStr)
{
#ifdef _UNICODE
int size = WideCharToMultiByte(CP_UTF8, 0, str, wcslen(str), NULL, 0, NULL, NULL);
char *str8 = (char *)malloc(size + 1);
WideCharToMultiByte(CP_UTF8, 0, str, wcslen(str), str8, size, NULL, NULL);
str8 = '\0';
return str8;
#else
return _strdup(str);
#endif
}
//将UNICODE字符串变换为窄字符串
void TcharToChar(const TCHAR *szTchar, char *szStr)
{
#ifdef _UNICODE
int size = WideCharToMultiByte(CP_ACP, 0, szTchar, wcslen(szTchar), NULL, 0, NULL, NULL);
char szTemp = { 0 };
WideCharToMultiByte(CP_ACP, 0, szTchar, wcslen(szTchar), szTemp, size, NULL, NULL);
strcpy(szStr, szTemp);
#else
return _strdup(str); //报错str未定义
#endif
//#ifdef _UNICODE
// int iLength;
// //获取字节长度
// iLength = WideCharToMultiByte(CP_ACP, 0, szTchar, -1, NULL, 0, NULL, NULL);
// //char szTemp = {0};
// WideCharToMultiByte(CP_OEMCP, WC_COMPOSITECHECK, szTchar, -1, szStr, iLength, NULL, NULL);
// //strcpy(szStr,szTemp);
//#else
// _tcscpy(szStr, szTchar);
//#endif
}
void CharToTchar(const char *szStr, TCHAR *szTchar)
{
#ifdef _UNICODE
int iLength;
iLength = MultiByteToWideChar(CP_ACP, 0, szStr, strlen(szStr) + 1, NULL, 0);
MultiByteToWideChar(CP_ACP, 0, szStr, strlen(szStr) + 1, szTchar, iLength);
#else
_tcscpy(szTchar, szStr);
#endif
}
是不是应该
return _strdup(strcpy(szStr, szTemp)); 本帖最后由 accor 于 2022-12-29 19:48 编辑
str改成szTchar? 看源码应该是支持unicode的话返回正常值,不支持的话返回原始的Tchar类型 本帖最后由 执_念 于 2022-12-29 20:38 编辑
strcpy(szStr, szTchar); 本帖最后由 teety 于 2022-12-29 22:57 编辑
char* Utf8ToGBK(const char* strUtf8)
{
int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
unsigned short * wszGBK = new unsigned short;
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, (LPWSTR)wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK=new char;
memset(szGBK, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0, (LPWSTR)wszGBK, -1, szGBK, len, NULL,NULL);
return szGBK;
}
char* GBKToUtf8(const char* strGBK)
{
int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, NULL,0);
unsigned short * wszUtf8 = new unsigned short;
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, (LPWSTR)wszUtf8, len);
len = WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)wszUtf8, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char;
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, (LPWSTR)wszUtf8, -1, szUtf8, len, NULL,NULL);
return szUtf8;
}
要自己处理/猜测文件名编码,因为 zip 标准没有定义文件名的编码。
有的程序是当前系统的编码,有些是 UTF-8 谢谢大佬的分享 解压怎么会出现中文乱码。
肯定你你编辑器的设置问题。编辑器改成utf8编码试试。
页:
[1]