Mac平臺下數據亂碼緣由

由於項目要求從文件中解析出數據而後輸出,一開始練數據時什麼編碼格式都不知道,後來仍是拿UltraEdit一個一個試的。發現時GBK。而後輸出,好蛋疼,一直亂碼,因而就想着是否是須要轉一下格式,百度了很久試了好多方法都沒有成功。後來又想着是否是C++語言自己有固定的編碼格式之類的東東,要是這樣那我可怎麼搞,難道把C++底層反過來玩一玩。windows

可是後來我就發現網上好多人都提到過Linux是默認使用utf-8 而windows則默認使用GBK。是否是平臺的緣由呢?我用的是Mac,Mac內核是Unix的,而Linux也是Unix系的,說不定放在windows下就不會有問題啊~~而後我就把數據讀出來寫到數組裏讓我用windows的同窗輸出一下,因而,我看到了我最想看到的景象。真是太坑爹了。數組


再貼上一我的家提供的方法吧,可是我沒有測試成功。測試

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

{spa

    if(nullptr==srcstr)3d

    {code

        printf("1bad parameter\n");orm

        return -1;unicode

    }it

    //首先先將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;

}

相關文章
相關標籤/搜索