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条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?