ANSI到UTF-8转换器。主要问题是输出与输入相同。如何解决?
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[], char *envp[])
{
FILE *SrcFile;
FILE *DstFile;
char ch;
wchar_t wch;
if((SrcFile = fopen("input.txt", "rb")) == NULL)
return 1;
if((DstFile = fopen("output.txt","wb+")) == NULL)
return 1;
fputc(0xFF, DstFile);
fputc(0xFE, DstFile);
while(TRUE)
{
ch = fgetc(SrcFile);
if(feof(SrcFile))
break;
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
&ch, 1, &wch, 1);
fputwc(wch, DstFile);
}
fclose(SrcFile);
fclose(DstFile);
return 0;
}
最佳答案
根据设计,底部127个字符在ASCII / ANSI和UTF-8之间是二进制兼容的。因此应该没有区别。
您不应在UTF-8文件内容中包括BOM(字节顺序标记),因为这是不必要的,因为UTF-8的字节流是唯一的,因此不需要处理“字节序”问题。另外,添加BOM可能会破坏某些接受ANSI的应用程序。