首页 > 其他分享 >字符串的格式转换,GBK.UTF8.WCHAR.CHAR

字符串的格式转换,GBK.UTF8.WCHAR.CHAR

时间:2023-04-27 10:22:06浏览次数:41  
标签:opt std val UTF8 GBK len CHAR same

这里介绍的是使用Windows api进行的转换,

看一下源代码:

template<typename Ay, typename Ty> 
    CStringT<Ay, StrTraitMFC_DLL<Ay> > StrTran(const Ty* val, int opt = CP_ACP) const noexcept {
        static_assert((std::is_same_v<Ay, char> && std::is_same_v<Ty, wchar_t>) ||
            (std::is_same_v<Ay, wchar_t> && std::is_same_v<Ty, char>));
        int len = 0;
        CStringT<Ay, StrTraitMFC_DLL<Ay> > buf;
        if constexpr (std::is_same_v<Ty, wchar_t>) {
            len = WideCharToMultiByte(opt, 0, val, -1, NULL, 0, 0, NULL);
            WideCharToMultiByte(opt, 0, val, -1, buf.GetBuffer(len), len, "error", 0);
        }
        else {
            len = MultiByteToWideChar(opt, 0, val, -1, NULL, 0);
            MultiByteToWideChar(opt, 0, val, -1, buf.GetBuffer(len), len);
        }
        return buf;
    }

我这里使用的CString的原生模板类,因为返回值类型不一定是W还A,这里默认的是CP_ACP,也就是GBK的转换,

如果参数1是宽字节类型,那么转化为窄字节类型,默认GBK

那么如果是UTF8类型转为GBK窄字节,那么需要先将UTF8类型转为宽字节类型,然后再将其转为GBK窄字节类型。

 

标签:opt,std,val,UTF8,GBK,len,CHAR,same
From: https://www.cnblogs.com/Super-biscuits/p/17358189.html

相关文章

  • pycharm怎么一键多行注释
    pycharm怎么一键多行注释pycharm可以批量注释,快捷键是Ctrl+/,鼠标选中需要注释的多行代码,然后按下Ctrl键和斜杠/键,就可以批量注释(每行前加#)了。选中代码:alt+shift+e,运行选中代码>>>a.title()#首字母大写'ThisIsA'......
  • 不能将参数 1 从“const char [8]”转换为“LPCWSTR”
    VS2010:#include<winsock2.h>#include<stdio.h>#defineMasterPort999//定义监听端口999#pragmacomment(lib,"ws2_32.lib")intmain(){WSADATAWSADa;structsockaddr_inSockAddrIn;SOCKETCSocket,SSocket;intiAddrSize;PROCES......
  • pycharm中python测试一直‘Instantiating tests...’转圈
    问题描述:defget_formatted_name(first,last):"""生成简洁的姓名"""full_name=first+""+lastreturnfull_name.title()importunittestfromname_functionimportget_formatted_nameclassNamesTestCase(unit......
  • 去除echart鼠标经过图表时默认背景黄色问题
    废话不说,上代码:策一://注册mouseover事件,去除hover样式myChart.on("mouseover",function(){myChart.dispatchAction({type:"downplay",})})策二(荐):geo:{emphasis:{disabled:true},}写在最后duang~这时候产品站出来了,说我要在......
  • 解决Python中报错RequestsDependencyWarning: urllib3 (1.26.9) or chardet (5.1.0)/c
      在运行requests包时,出现了以下报错信息:RequestsDependencyWarning:urllib3(1.26.9)orchardet(5.1.0)/charset_normalizer(2.0.12)doesn'tmatchasupportedversion!warnings.warn("urllib3({})orchardet({})/charset_normalizer({})doesn'tmatchasu......
  • uni-app中使用uCharts图表设置横向滚动无法滑动。
    opts:{ color:["#1890FF","#91CB74","#FAC858","#EE6666","#73C0DE","#3CA272","#FC8452","#9A60B4","#ea7ccc"], padding:[15,10,0,0], enableScroll:true, upd......
  • Echarts4.0 迁徙图模拟Echarts2.0样式
     由于公司业务需求做Echarts4.0的迁徙图,但是Echarts4.0默认的迁徙图的飞行轨迹和迁徙线的颜色都是一样的,比较单调,现在模拟Echarts2.0的样式模拟了一个demo,虽然没有全部相同,但大体相近。备忘一下letminigrateChart=echarts.init(document.getElementById("MinigrateChart"));......
  • 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(15)-Charles如何配置反向代理
    1.简介在App开发的过程当中,抓包是一个很常见的需求,而有些app的请求不会在网络设置代理时被抓到数据包,这里若是需要抓包就需要搭建反向代理。2.什么是代理?什么是代理,来一张图了解一下。 代理又分为正向代理和反向代理。3.什么是正向代理?先来看张图~【再举个栗子】某同......
  • vue项目中引入echarts中国地图
     最近项目中根据项目需求,展示中国地图一、下载echarts插件(我这里使用的是 4.9.0 版本)[email protected]二、在需要使用的页面引入echarts(这里是单独封装了地图组件) components/map.vue<template><divclass="map-view"><divid="main"></d......
  • 老师好,请教下pycharm 里面怎么安装 openyxl?
    大家好,我是皮皮。一、前言前几天在Python钻石交流群【不争】问了一个Python库安装的基础问题,这里拿出来给大家分享下。下图是他的报错截图:二、实现过程这个问题其实不太难,不仔细看的话,还真看不出来啥问题,这里【狂吃山楂片】指出,库名字写的不对,应该是openpyxl,粉丝自己写的是......