博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mac平台下数据乱码原因
阅读量:6713 次
发布时间:2019-06-25

本文共 1377 字,大约阅读时间需要 4 分钟。

hot3.png

因为项目要求从文件中解析出数据然后输出,一开始练数据时什么编码格式都不知道,后来还是拿UltraEdit一个一个试的。发现时GBK。然后输出,好蛋疼,一直乱码,于是就想着是不是需要转一下格式,百度了好久试了好多方法都没有成功。后来又想着是不是C++语言本身有固定的编码格式之类的东东,要是这样那我可怎么搞,难道把C++底层反过来玩一玩。

但是后来我就发现网上好多人都提到过Linux是默认使用utf-8 而windows则默认使用GBK。是不是平台的原因呢?我用的是Mac,Mac内核是Unix的,而Linux也是Unix系的,说不定放在windows下就不会有问题啊~~然后我就把数据读出来写到数组里让我用windows的同学输出一下,于是,我看到了我最想看到的景象。真是太坑爹了。

再贴上一个人家提供的方法吧,但是我没有测试成功。

int gbk2utf8(char *utfstr,const char *srcstr,int maxutfstrlen)

{

    if(nullptr==srcstr)

    {

        printf("1bad parameter\n");

        return -1;

    }

    //首先先将gbk编码转换为unicode编码

    if(nullptr==setlocale(LC_ALL,"zh_CN.GBK"))//设置转换为unicode前的码,当前为gbk编码

    {

        printf("2bad parameter\n");

        return -1;

    }

    int unicodelen=(int)mbstowcs(nullptr,srcstr,0);//计算转换后的长度

    if(unicodelen<=0)

    {

        printf("can not transfer!!!\n");

        return -1;

    }

    wchar_t *unicodestr=(wchar_t *)calloc(sizeof(wchar_t),unicodelen+1);

    mbstowcs(unicodestr,srcstr,strlen(srcstr));//gbk转换为unicode

    

    //unicode编码转换为utf8编码

    if(nullptr==setlocale(LC_ALL,"zh_CN.UTF-8"))//设置unicode转换后的码,当前为utf8

    {

        printf("3bad parameter\n");

        return -1;

    }

    int utflen=(int)wcstombs(nullptr,unicodestr,0);//计算转换后的长度

    if(utflen<=0)

    {

        printf("can not transfer!!!\n");

        return -1;

    }

    else if(utflen>=maxutfstrlen)//判断空间是否足够

    {

        printf("dst str memory not enough\n");

        return -1;

    }

    wcstombs(utfstr,unicodestr,utflen);

    utfstr[utflen]=0;//添加结束符

    free(unicodestr);

    return utflen;

}

转载于:https://my.oschina.net/u/2276921/blog/526510

你可能感兴趣的文章
Spring Boot(06)——参数配置机制
查看>>
【WPF】右下角弹出自定义通知样式(Notification)——简单教程
查看>>
keras 使用笔记
查看>>
Android中主要类的继承关系梳理汇总
查看>>
webApp爬坑之路(1)
查看>>
Python发送邮件模块之——yagmail模块
查看>>
Android 分享微信小程序失败二三事
查看>>
SpringBoot通过jar包启动时MyBatis无法定位实体类
查看>>
linux系统常用命令
查看>>
面对霍金的担忧,人工智能会让我们在火星实现定居吗
查看>>
定制一款漂亮的终端
查看>>
timed out waiting for to be synced
查看>>
(5)Python字典
查看>>
mysql问题
查看>>
为何要领域驱动设计
查看>>
ios GCD ---- (1)
查看>>
Pi编译安装PHP/Nginx并安装完整LEMP环境
查看>>
HTTPS 也不安全?被发现新漏洞会暴露你的数据
查看>>
x86 和 ARM 谁能主宰服务器市场?Linux 之父和 Redis 之父有分歧了
查看>>
dva.js学习梳理集
查看>>