utf8转换ansi,手机txt格式转换器
匿名用户
一级
2018-08-21答复
请参照以下方法将CFile类更改为FILE*。 将字符串更改为写入文件流。
请注意,汉字在utf8中占了3个字节。
//unicode to ansi
voidcconvertdlg : onbnclickedbuttonunicodetoansi (
{
//unicode to ansi
wchar_t* wszString=L'abcd1234你和我';
//进行预变换,得到所需的空间大小,这次使用与上面的名字相反的函数
intan silen=:3360 widechartomultibyte (CP _ ACP,NULL,wszString,wszString ),NULL,0,NULL,NULL );
//同上,为了分配空间,在“0”中确保空间
char* szAnsi=new char[ansiLen 1];
//转换
//unicode版对应的strlen是wcslen
:3360 widechartomultibyte (CP _ ACP,NULL,wszString,wcslen(wszstring ),szAnsi,ansiLen,NULL );
//在最后加上“0”
szAnsi[ansiLen]='\0”;
//Ansi版的消息盒API
:消息boxa (getsafehwnd )、szAnsi、szAnsi、MB_OK );
//接下来写课文
//写文本文件,ANSI文件中没有BOM
CFile cFile;
cfile.open(_t ),cfile :3360 modewrite|cfile 3360: mode create;
//文件开头
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
voidcconvertdlg : onbnclickedbuttonu 8to unicode (
{
//UTF8 to Unicode
//中文直接复制会乱码,编译器可能会报告错误,所以采用十六进制格式
char * szu8=' ABCD 1234\xe4\xbd\xa0\xe6\x88\x91\xe4\xbb\x96\x00 ';
//进行预变换,得到所需的空间大小
int wcslen=:3360 multibytetowidechar (CP _ utf8,NULL,szU8,strlen ) szU8 )、NULL,0 );
//要分配空间,请在“\0”中保留空间,MultiByteToWideChar不会给“\0”分配空间
whar _ t * wszstring=new wchar _ t [ wcslen1];
//转换
:3360 multibytetowidechar (CP _ utf8,NULL,szU8,strlen(szu8 ),wszString,wcsLen );
//在最后加上“0”
wszString[wcsLen]='\0”;
//unicode版的消息盒API
: messagebox w (getsafehwnd (,wszString,wszString,MB_OK );
//写文本和ansi to unicode一样
}