Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……).doc

Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……).doc

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……) 导读:就爱阅读网友为您分享以下“Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……)”资讯,希望对您有所帮助,感谢您对92的支持! Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……)Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……) Ansi、Unicode、UTF8字符串之间的转换和写入文本文件 最近有人问我关于这个的问题,就此写一篇blogAnsi 字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个/0结尾,常用于txt文本文件Unicode 字符串,每个字符(汉字、英文字母)都占2个字节,以2个连续的/0结尾,NT操作系统内核用的是这种字符串,常被定义为typedef unsigned short wchar_t;所以我们有时常会见到什么char*无法转换为unsigned short*之类的错误,其实就是unicodeUTF8 是Unicode一种压缩形式,英文A在unicode中表示为0x0041,老外觉得这种存储方式太浪费,因为浪费了50%的空间,于是就把英文压缩成1个字节,成了utf8编码,但是汉字在utf8中占3个字节,显然用做中文不如ansi合算,这就是中国的网页用作ansi编码而老外的网页常用utf8的原因。UTF8在还游戏里运用的很广泛,比如WOW的lua脚本等下面来说一下转换,主要用代码来说明吧写文件我用了CFile类,其实用FILE*之类的也是一样,写文件和字符串什么类别没有关系,硬件只关心数据和长度Ansi转Unicode介绍2种方法 voidCConvertDlg::OnBnClickedButtonAnsiToUnicode(){//ansitounicodechar*szAnsi=“abcd1234你我他”;//预转换,得到所需空间的大小intwcsLen=::MultiByteToWideChar(CP_ACP,NULL,szAnsi,strlen(szAnsi),NULL,0);//分配空间要给’/0’留个空间,MultiByteToWideChar不会给’/0’空间wchar_t*wszString=newwchar_t[wcsLen+1];//转换::MultiByteToWideChar(CP_ACP,NULL,szAnsi,strlen(szAnsi),wszString,wcsLen);//最后加上’/0’wszString[wcsLen]=‘/0’;//unicode版的MessageBoxAPI::MessageBoxW(GetSafeHwnd(),wszString,wszString,MB_OK);//接下来写入文本//写文本文件,头2个字节0xfeff,低位0xff写在前CFilecFile;cFile.Open(_T(“1.txt”),CFile::modeWrite|CFile::modeCreate);//文件开头cFile.SeekToBegin();cFile.Write(“/xff/xfe”,2);//写入内容cFile.Write(wszString,wcsLen*sizeof(wchar_t));cFile.Flush();cFile.Close();delete[]wszString;wszString=NULL;//方法2//设置当前地域信息,不设置的话,使用这种方法,中文不会正确显示//需要#includelt;locale.hgt;setlocale(LC_CTYPE,”chs”);wchar_twcsStr[100];//注意下面是大写S,在unicode中,代表后面是ansi字符串//swprintf是sprintf的unicode版本//格式的前面要加大写L,代表是unicodeswprintf(wcsStr,L”%S”,szAnsi);::MessageBoxW(GetSafeHwnd(),wcsStr,wcsStr,MB_OK);}Unicode转Ansi也是2种方法 voidCConvertDlg::OnBnClickedButtonUnicodeToAnsi(){//unicodetoansiwchar_t*wszString=L”abcd1234你我他”;//预转换,得到所需空间的大小,这次用的函数和上面名字相反intansiLen=::WideCharToMultiByte(CP_ACP,NULL,wszString,wcslen(wszString),NULL,0,NULL,NULL);/ /同上,分配空间要给’/0

文档评论(0)

raojun0010 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档