牛骨文教育服务平台(让学习变的简单)
博文笔记

实现fopen支持中文的方法

创建时间:2017-09-14 投稿人: 浏览次数:742

投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-07-07 我要评论

这篇文章主要介绍了VC下实现fopen支持中文的方法,需要的朋友可以参考下

VC的fopen函数第一个参数是const char*,一旦遇到中文文件名就难以应付了,如果中文是UTF8编码的话,我们还可以用下列代码将其转换为UNICODE,然后用_wfopen函数打开文件。

代码如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 bool UTF8ToUnicode(const char* UTF8, wchar_t* strUnicode) {  DWORD dwUnicodeLen;    //转换后Unicode的长度  TCHAR *pwText;      //保存Unicode的指针 // wchar_t* strUnicode;    //返回值  //获得转换后的长度,并分配内存  dwUnicodeLen = MultiByteToWideChar(CP_UTF8,0,UTF8,-1,NULL,0);  pwText = new TCHAR[dwUnicodeLen];  if (!pwText)  {  return false;  }  //转为Unicode  MultiByteToWideChar(CP_UTF8,0,UTF8,-1,pwText,dwUnicodeLen);  //转为CString  wcscpy(strUnicode, pwText);  //清除内存  delete []pwText;  return true; }

这个函数的用法如下:

?
1 2 3 4 wchar_t strUnicode[260]; UTF8ToUnicode(streamName, strUnicode); FILE* fid = _wfopen(strUnicode, L"rb"); // FILE* fid = fopen(streamName, "rb");//此为原来的方法,遇到中文不能正确打开

上述函数仍有不够完善之处,如参数strUnicode的长度不能灵活设置,读者可根据自身需求进一步加以完善!

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。