由於項目要求從文件中解析出數據而後輸出,一開始練數據時什麼編碼格式都不知道,後來仍是拿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;
}