#ifndef UNICODE
#define UNICODE
#endif
#include <Windows.h>
#include <cstdio>
#include <fstream>
using namespace std;
int main()
{
FILE* resFile;
char multiByteStr[256];
ifstream oFile;
FILE* exampleFile;
TCHAR buffer[256];
system("chcp 65001");
resFile = _wfopen(L"foo",L"w, ccs=UTF-8");
fwprintf(resFile,L"%s",L"C:\\exsistingFolder\\zażółć gęśłą jaźń ☺☻♥♦• ć.txt");
fclose(resFile);
oFile.open(L"foo");
oFile.getline(multiByteStr,256,'\n');
oFile.close();
MultiByteToWideChar(CP_UTF8,0,multiByteStr,256,buffer,256);
wprintf(L"%s",buffer);
exampleFile = _wfopen(buffer,L"w, ccs=UTF-16LE");
fwprintf(exampleFile,L"%s",buffer);
fclose(exampleFile);
system("pause");
return 0;
}
如您所见,程序应该创建文件“foo” resFile
,其中包含要创建的文件的完整路径,并且这个新文件exampleFile
应该包含自身的路径。尽管在 Visual Studio 2010 的调试过程中自动生成缓冲区具有正确的字符串,但不会创建 exampleFile。为什么?
还有一件事:为什么wprintf
不输出扩展字符,虽然我已经将控制台的字体切换到了 Lucida Console - 可以处理未编码字符的那个。
附言。exampleFile 指向NULL
,甚至在 之后_wfopen
,并且 buffer 的最后一个字符是'/0'
。