吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1369|回复: 9
收起左侧

[求助] C++求解6

[复制链接]
隐藏英雄 发表于 2022-12-29 17:54
本帖最后由 隐藏英雄 于 2022-12-29 17:56 编辑

QQ图片20221229174833.png
我使用zip和unzip类进行解压,可以成功解压 但是会出现解压中文乱码和失败问题,谁有什么好的MFC C++ 解压方法和代码吗,分享一下,下面是找到的一个号称修复了中文乱码问题的文件 可是他这个文件本身就报错了
str未定义
文件下载地址 https://pan.baidu.com/s/1dH1sgZehG2Tb_2EZ-pdF8Q?pwd=dxek           提取码dxek


[C++] 纯文本查看 复制代码
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[size] = '\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[1024] = { 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[1024] = {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
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
3084507685 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

咬字分开念 发表于 2022-12-29 18:44
是不是应该


        return _strdup(strcpy(szStr, szTemp));
accor 发表于 2022-12-29 19:47
本帖最后由 accor 于 2022-12-29 19:48 编辑

str改成szTchar?
accor 发表于 2022-12-29 19:51
看源码应该是支持unicode的话返回正常值,不支持的话返回原始的Tchar类型
头像被屏蔽
tl;dr 发表于 2022-12-29 20:22
提示: 作者被禁止或删除 内容自动屏蔽
执_念 发表于 2022-12-29 20:37
本帖最后由 执_念 于 2022-12-29 20:38 编辑

strcpy(szStr, szTchar);
teety 发表于 2022-12-29 22:55
本帖最后由 teety 于 2022-12-29 22:57 编辑

[C++] 纯文本查看 复制代码
char* Utf8ToGBK(const char* strUtf8)
{
        int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0); 
        unsigned short * wszGBK = new unsigned short[len+1]; 
        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[len + 1]; 
        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[len+1]; 
        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[len + 1]; 
        memset(szUtf8, 0, len + 1); 
        WideCharToMultiByte (CP_UTF8, 0, (LPWSTR)wszUtf8, -1, szUtf8, len, NULL,NULL); 
        return szUtf8; 
}
爱飞的猫 发表于 2022-12-30 02:05
要自己处理/猜测文件名编码,因为 zip 标准没有定义文件名的编码。
有的程序是当前系统的编码,有些是 UTF-8
wanglong001 发表于 2022-12-30 10:57
谢谢大佬的分享
ibilibili 发表于 2022-12-30 18:03
解压怎么会出现中文乱码。
肯定你你编辑器的设置问题。编辑器改成utf8编码试试。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表