weixin_42576032 2019-05-27 17:42 采纳率: 100%
浏览 298
已采纳

密钥GB2312转UTF-8时会莫名其妙多出200字节的重复字符串

1.如题,VC++6.0默认GB2312编码,项目需要UTF-8,从网上找了一个转换程序,出调用函数结束后总是会多出200字节左右的重复代码(如A+B+C转换之后变为A%..B%..C%..B%..)这种情况
2.猜测原因为UTF-8中英文只占1字节,而某些字符则占2字节,导致长度测定错误
求大佬指导,下文为引用函数:

void ConvertGB2312ToUtf8(char* gb2312,char *out)
{
int len1=MultiByteToWideChar(CP_ACP, 0, gb2312, strlen(gb2312), NULL,0);
unsigned short * wszUtf8 = new unsigned short[len1+1];
memset(wszUtf8, 0, len1);
MultiByteToWideChar(CP_ACP, 0, gb2312, strlen(gb2312), wszUtf8, len1);
int len2 = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, FALSE);
char *szUtf8=new char[len2];
memset(szUtf8, 0, len2);
WideCharToMultiByte (CP_UTF8, 0, wszUtf8, -1, szUtf8, len2, NULL,FALSE);
memcpy(out,szUtf8,strlen((char *)szUtf8));
delete[] szUtf8;
delete[] wszUtf8;
}

  • 写回答

2条回答 默认 最新

  • weixin_42576032 2019-05-28 09:45
    关注

    自己解决了,不知道原理,从网上看到MultiByteToWideChar和WideCharToMultiByte函数处理128字节以上的数据会有问题,
    我把密钥数据差分为120字节一段,分成几段去转化,结果不再多出数据

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号