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的应用程序。

10-06 11:24