永发信息网

用C语言如何将UTF-8编码的txt文件改成ANSI编码的文件,非常感谢!

答案:2  悬赏:40  手机版
解决时间 2021-01-03 14:42
  • 提问者网友:眉目添风霜
  • 2021-01-03 03:18
用C语言如何将UTF-8编码的txt文件改成ANSI编码的文件,非常感谢!
最佳答案
  • 五星知识达人网友:一叶十三刺
  • 2021-01-03 04:13
如果文件中,不包含unicode字符,直接转换就可以。。。。。。。如果包含有unicode字符,则要做转码
在windows中,win32 API有函数可以转码
~
~
~
全部回答
  • 1楼网友:独行浪子会拥风
  • 2021-01-03 05:52
请参照下面方法,把 cfile类 改成 file*。 写字符串改成写文件流。 注意,汉字在utf8中占3个字节。 // unicode to ansi void cconvertdlg::onbnclickedbuttonunicodetoansi() { // unicode to ansi wchar_t* wszstring = l"abcd1234你我他"; //预转换,得到所需空间的大小,这次用的函数和上面名字相反 int ansilen = ::widechartomultibyte(cp_acp, null, wszstring, wcslen(wszstring), null, 0, null, null); //同上,分配空间要给'\0'留个空间 char* szansi = new char[ansilen + 1]; //转换 //unicode版对应的strlen是wcslen ::widechartomultibyte(cp_acp, null, wszstring, wcslen(wszstring), szansi, ansilen, null, null); //最后加上'\0' szansi[ansilen] = '\0'; //ansi版的messagebox api ::messageboxa(getsafehwnd(), szansi, szansi, mb_ok); //接下来写入文本 //写文本文件,ansi文件没有bom cfile cfile; cfile.open(_t("1.txt"), cfile::modewrite | cfile::modecreate); //文件开头 cfile.seektobegin(); //写入内容 cfile.write(szansi, ansilen * sizeof(char)); cfile.flush(); cfile.close(); delete[] szansi; szansi =null; //方法2 //和上面一样有另一种方法 setlocale(lc_ctype, "chs"); char szstr[100]; //注意下面是大写,在ansi中,代表后面是unicode字符串 //sprintf sprintf(szstr, "%s", wszstring); ::messageboxa(getsafehwnd(), szstr, szstr, mb_ok); } // utf8转unicode void cconvertdlg::onbnclickedbuttonu8tounicode() { //utf8 to unicode //由于中文直接复制过来会成乱码,编译器有时会报错,故采用16进制形式 char* szu8 = "abcd1234\xe4\xbd\xa0\xe6\x88\x91\xe4\xbb\x96\x00"; //预转换,得到所需空间的大小 int wcslen = ::multibytetowidechar(cp_utf8, null, szu8, strlen(szu8), null, 0); //分配空间要给'\0'留个空间,multibytetowidechar不会给'\0'空间 wchar_t* wszstring = new wchar_t[wcslen + 1]; //转换 ::multibytetowidechar(cp_utf8, null, szu8, strlen(szu8), wszstring, wcslen); //最后加上'\0' wszstring[wcslen] = '\0'; //unicode版的messagebox api ::messageboxw(getsafehwnd(), wszstring, wszstring, mb_ok); //写文本同ansi to unicode }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯