永发信息网

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

答案:2  悬赏:40  手机版
解决时间 2021-01-03 14:42
用C语言如何将UTF-8编码的txt文件改成ANSI编码的文件,非常感谢!
最佳答案
如果文件中,不包含unicode字符,直接转换就可以。。。。。。。如果包含有unicode字符,则要做转码
在windows中,win32 API有函数可以转码
~
~
~
全部回答
请参照下面方法,把 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 }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
南雄市行政服务中心教育局办事处办公位置在哪
我想辞职,我该怎样委婉点说
阅读理解Theyoungboysawme,orrather,hesaw
视频文件后缀名都有 什么?
下列词语中字的读音全都正确的一项是A.衣袂(
道光癸卯闰秋,吾妻秋芙来归。秋芙好棋,而不
乳源瑶族自治县科技教育局办公位置在哪啊?好
I spent several years in France, I never
同学古文怎么说
x8÷(-x)6.
农行结息交易是什么
幼儿园家长评语大全精短
求近年嘎纳电影节金棕榈奖获得提名的电影,谢
变胖日语怎么说
鹤山市教育局地址有知道的么?有点事想过去!
推荐资讯
单选题有人认为:“人们可以利用对规律的认识
InitialKeyboardIndicators里面的默认值选项
懒人蒜香锡纸金针菇的家常做法大全怎么做
牙齿上的垢可以用针刮掉吗?
什么是机械互锁
如何取消500万彩票帐户
.. ----She looks so unhappy. Did you tell
单选题二十四节气中的春分和秋分均为太阳直射
弱弱问下黑檀木茶盘开裂怎么办
雪上加霜近义词
打印表格时,如何把表格横着打出来?
沙县金鼎城的尴尬处境知多少
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?