2017-05-19 8 views
0

これは私のファイルのエンコーディングを変換する機能です。 変換する前にNotepad ++でファイルを開き、エンコードメニューを使用してエンコードをチェックしたところ、エンコードがUTF 8であることがわかりました。次の関数を使用してファイルを変換しようとしましたが、
機能をご検討ください。「BOMなし」のファイルのエンコードを「Windows-1252」エンコードファイルに変更するにはどうすればよいですか?

public static void ConvertFileEncoding(string srcFile, Encoding srcEncoding, string tempFile) 
    { 

     try 
     { 
      using (var reader = new StreamReader(srcFile)) 
      using (var writer = new StreamWriter(tempFile, false, Encoding.ASCII)) 
      { 
       char[] buf = new char[1024]; 

       while (true) 
       { 
        int count = reader.Read(buf, 0, buf.Length); 
        if (count == 0) 
        { 
         break; 
        } 
        writer.Write(buf, 0, count); 
       } 
      } 

      System.IO.File.Copy(tempFile, srcFile, true); // Source file is replaced with Temp file 
      DeleteTempFile(tempFile); 

      // TO DO -- Log Sucess Details 
     } 
     catch (Exception e) 
     { 
      throw new IOException("Encoding conversion failed.", e); 

      // TO DO -- Log failure Details 
     } 
    } 

Iは、Windows-1252にBOMせずにファイルを変換する際にどのような間違ったhappenesを理解する上で私を助けてください?

+0

ASCIIまたはWindows-1252のどちらが必要ですか?ファイルのエンコーディングはライターによって決定されますが、出力は多数のエンコーディングで同一である場合があります。 (あなたのテストデータがこれに従うことで混乱しないでください。)読者は、ライターが使用したエンコーディングを使用するだけです。 –

+0

Unicode入力データにターゲット文字セットに含まれていない文字が含まれているときに、何をしたいですか?選択肢: '?'で置き換えたり、例外をスローしたり、決して起こらないと信じています。 –

答えて

1

ASCIIで128未満の値を持つ文字は、UTF-8またはASCIIでエンコードされた場合、すべて同じです。あなたのファイルがこれらのファイルのみで構成されている場合は、そのファイルはUTF-8またはASCIIと同じです。

プログラムはこれらが同一であるため、これらを区別することはできません。 UTF-8は現在非常に一般的に使用されているので、プログラムが推測するファイルの内容以外の情報を持たず、エンコーディングを表示したい場合には、合理的な選択です。

+0

私の要求は、ファイルの内容をSQLテーブルにインポートすることでした。 ファイルがWindows-1252エンコーディングでない場合、インポートは失敗します。 –

+0

これらの想定される検出アルゴリズムでは、知っているすべてのことが言えるだけです。たとえば、ファイルはUTF-8 w/o BOM、Windows-1252、...およびASCIIとしてエンコードされたテキストとして読み込み可能です。完全なリスト)。 –

関連する問題