0

これは簡単な作業だと思いました。数回試した後、もう一度開いて書き直すよりも、試行錯誤した真の書き込みを一時的に試しました。

#include <stdlib.h>
#include <stdio.h>
int main()
{
     FILE *f = fopen("main2.c","r");
     FILE *t = fopen("temp","w");
     int c;
     int count = 0;
     while((c = fgetc(f))!=EOF)
     {
          if(c)
          {
               fputc(c,t);
          }
          else
          {
               printf("null found\n");
          }
    }
    fclose(f);
    fclose(t);
    FILE *n = fopen("main2.c","w");
    FILE *w = fopen("temp","r");
    while((c=fgetc(w))!=EOF)
    {
          fputc(c,n);
    }
    fclose(n);
    fclose(w);
    return 0;
}

これはたくさんの漢字を吐き出すだけです。根本的な文字エンコードが問題になる可能性がありますか?それとも私はここで完全な初心者ですか?

私の16進エディタでは、コピー/貼り付けができません。ここでファイルを元の状態に戻す方法がわからないので、Googleドキュメントで圧縮して、取得できない場合はすぐに知らせてください。

https://docs.google.com/open?id=0B4UPOuCR5uRGZzJQZUpVaktKYlk

編集:ここで待ってくださいそれはHxE経由です編集:

FF FE 23 00 69 00 6E 00 63 00 6C 00 75 00 64 00 65 00 20 00 3C 00 73 00 74 00 64 00   
6C  00 69 00 62 00 2E 00 68 00 3E 00 0D 00 0A 00 23 00 69 00 6E 00 63 00 6C 00 75 00 64 00 
65 00 20 00 3C 00 61 00 6C 00 6C 00 65 00 67 00 72 00 6F 00 2E 00 68 00 3E 00 0D 00 0A 00 
23 00 69 00 6E 00 63 00 6C 00 75 00 64 00 65 00 20 00 22 00 6D 00 6F 00
4

2 に答える 2

3

バイナリモードでファイルを開きます。

 FILE *f = fopen("main2.c","rb");
 FILE *t = fopen("temp","wb");
于 2012-10-22T23:59:52.723 に答える
1

入力がUTF-16Unicodeであるため、NULLバイトを削除している可能性があります。その場合は、ファイルの先頭にあるバイト順マーク(BOM)も削除する必要があります。最初の2バイトが0xFF、0xFEの場合、リトルエンディアンのUTF-16ファイルがあります。それらを破棄します!それらをそのままにしておくと、ソース内のASCII文字のすべてのペアが結合された16ビット文字コードとして扱われます。ストレンジネスが続きます。

同様に、最初の2バイトが0xFE、0xFFの場合、ファイルはビッグエンディアンUTF-16であり、これらの2バイトも削除する必要があります。そうしないと、ファイルは再び16ビットコードとして扱われ、最初に上位バイトのみが使用されます。

于 2012-10-23T02:17:32.330 に答える