2012-04-25 19 views
1

多くのCSVファイルをUTF-8でエンコードしているバッチ変換しようとしていますメモ帳でCSVファイルを開き、.NETでUTF-8に変換しますか?

これまでのところ、csvファイルを1つずつ開き、「すべてのファイル」を選択しています。 "save as/format type"ドロップダウンボックスをクリックし、その下のドロップダウンボックスからエンコーディングを "UTF-8"として再度選択して保存します(元のファイルを置き換えるかどうかは問いません)。

この手順は非常に面倒なので、私は私が思いついたすべてがこれですvb.NET

にそれのために小さなアプリを書きたいと思います:System.Text.Encoding.Convert(System.Text.Encoding.ASCII,System.Text.Encoding.UTF-8)

しかし、エラーを作成するのthats :(

任意の提案 Thxを

UPDATE:?だけではなく、メモ帳を使用しての.NETの内部のlib /のfuncsを使用するために私の質問を更新しました:D

+2

提案使用/適応:スキップメモ帳、.NETで利用可能な符号化変換関数を使用します。 – deceze

+0

@decezeですが、これは少し実験になりますか? (インターネット上のどこかで、.NETが時にはエンコード/ BOMの正しいセットを認識できないことがあります。ただし、サードパーティのlibがiconvのように使われていない限り)安全な側にするために、私はメモ帳に固執しています:D – gunther

+1

I wouldn .netでメモ帳を自動化しません。いずれかのエンコードを.NETで(decezeごとに)完全に行うか、代わりにAutoHotkeyで自動化することができます。これは、キーボードとマウスのクリックのマクロを記録し、それを再生することができます。 – GregHNZ

答えて

0

お試しthis Mozilla's charset detectorまたは.NET port of itです。
OR
Hereあなたが他の方法で行ったことがあります。

EDIT: OR this

using System; 
using System.Data; 
using System.IO; 
using System.Text; 


public partial class Converting : System.Web.UI.Page 

{ 
    protected void Page_Load(object sender, EventArgs e) 

    { 


     string sourceDir = "C:\\test"; 

     string newDir = "C:\\test2"; 

     foreach (String sourceFile in System.IO.Directory.GetFiles(sourceDir)) 

     { 
      char[] splitter = { '\\' }; 



      String[] str = sourceFile.Split(splitter); 
      String fname = str[str.Length - 1]; 


      FileStream fs = new FileStream(sourceFile, FileMode.Open, FileAccess.ReadWrite); 

      StreamReader ReadFile = new StreamReader(fs, System.Text.Encoding.ASCII); 

      FileStream fs1 = new FileStream(newDir + 
"\\new_" + fname, FileMode.OpenOrCreate, FileAccess.Write); 
      StreamWriter WriteFile = new StreamWriter(fs1, System.Text.Encoding.UTF8); 

      String strLine; 
      while (ReadFile != null) 

      { 
       strLine = ReadFile.ReadLine(); 
       //MessageBox.Show(strLine); 
       if (strLine != null) 
       { 
        WriteFile.WriteLine(strLine); 
       } 
       else 
       { 
        ReadFile.Close(); 
        ReadFile = null; 
        WriteFile.Close(); 
       } 
      } 
     } 
    } 
} 
+0

Thxしかし、私はちょうど仕事を完了する簡単な方法で行くだろうnoobであることから離れている(その害はない:?):D)。 – gunther

+0

私は他の人が同じようにさまざまなやり方で行ったことのリンクを私に提供してくれました。役に立った: – gunther

+0

あなたは歓迎されていますが、ASP.NETの例も多少似ているはずです:http://forums.asp.net/t/1173381.aspx/1 –

0

ディレクトリのファイルを列挙するにはDirectoryInfoを見てください。

次に、エンコードの変換に便利な便利な方法であるFile.ReadAllText()File.WriteAllText()をご覧ください。

ファイル(U + FEFF)の開始時に署名せずにUTF-8にしたい場合は、これはワンショットであれば

var encoding = new UTF8Encoding(false); 
+0

返信用のThx :) CSVファイルの開始時の署名については確かに分かりませんが、BOMについて少しは読んだことがあります。それはあなたがここに置こうとしていることですか? :|また、メモ帳を使用して手動で変換したファイルと、 "System.Text.Encoding"を使用して.NETの手順を使用したファイルと比較すると、実質的に違いはありますか?ライン/文字間隔、改行など? – gunther

+0

署名は確かにBOMです。 – RvdK

+0

本当に有用な情報thxはたくさんあります:) – gunther

0

であなたのエンコーディングを作成する必要があることに注意してください、PowerShellをアップし火災:

gci *.csv | %{ Get-Content $_ | Set-Content -Encoding UTF8 "$($_.BaseName)_Encoded.csv" } 

GCI * .CSV:結果はセット内容にするためにそのパイプし、「foreachの」ループ(%)に各ファイルの のGet-コンテンツを、結果を現在のディレクトリにあるすべてのCSVファイルを取得し、パイプUTF8変換を行い、 "_Encode"で後置された同じベース名を持つファイルに結果を格納しますd "である。

+0

Thx for the shot:D but Windows only environment no * nix(もし* nixなら、* nixでそれを行う方法に関する記事/記事の数がほとんどないので嬉しいですが、Windowsでは悲しいことです) – gunther

+0

PowerShellはWindows用です:-) http:// en。 wikipedia.org/wiki/Windows_PowerShell –

+0

恐ろしい!現在のディレクトリにあるすべてのファイルを変換しますか?私はバッチ変換をしたかったのです。どのように私は現在のディレクトリに存在するすべてのファイルのループで動作させることができますか? – gunther