用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有函数可以转码
~
~
~
在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
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯