2016-05-05 15 views
0

CSVファイルをスキャンしてマージするアプリケーションを作成しています。新しいファイルにデータを書き込む際に問題が発生しています。フィールドの1つには、新しいファイルに書き込むまで維持されるö文字があります。 öUTF8ファイルに書き込むと文字が失われる

私は、UTF8エンコーディングが使用するのが最良ではないが、より良い作業方法を見つけることはないと思っています。これは「期待値」の代わりに「実際の」値になります。これについてのどんな助けも大いに評価されるでしょう!

byte[] nl = new UTF8Encoding(true).GetBytes("\n"); 
using (FileStream file = File.Create(filepath)) 
{ 
string text; 
byte[] info; 

for (int r = 0; r < data.Count; r++) 
{ 
    int c = 0; 
    for (; c < data[r].Count - 1; c++) 
    { 
     text = data[r][c] + @","; 
     text = text.Replace("\n", @""); 
     text = text.Replace(@"☼", @""""); 

     info = new UTF8Encoding(true).GetBytes(text); 
     file.Write(info, 0, text.Length); 
    } 

    text = data[r][c]; 
    info = new UTF8Encoding(true).GetBytes(text); 
    file.Write(info, 0, text.Length); 

    file.Write(nl, 0, nl.Length); 
} 

}

答えて

1

私は誤解される可能性があり、これはおそらくコメントで行く必要がありますが、私はまだコメントすることはできません。テキストエディタは、バイナリデータを特定のエンコーディングにデコードします。実際のバイナリデータは16進エディタで確認できます。ファイルに書き出しているバイナリデータを確認することができます。 Notepad ++には、使用できる16進エディタプラグインがあります。

BinaryWriterは、ファイルにバイトを書き込むときには使いやすいです。 BinaryWriterのエンコーディングを設定することもできます。これをUTF-8に設定したいと思うでしょう。

編集

私は忘れてしまった。バイトに書き出すときは、バイトとしても読み込みたいと思うでしょう。 BinaryReaderを使用し、エンコードをUTF-8に設定します。

使用中のバイト数Encoding.UTF8.GetString()を読み込んだ後、バイトを文字列に変換します。

+0

なぜ*バイナリ*リーダーにエンコーディングを与えることは、私を超えて考える価値のあるアイデアでした... – rubenvb

+0

ありがとう。あなたはそうではありません。テキストエディタです。 Notepad ++エンコーディングをクリックしました(エンコーディングについてのメニューであることを知っているはずです)、UTF8に変更しました。すべては今良いです。 – GaidenFocus

1

UTF-8はマルチバイトであるため、出力を切り捨てている可能性があります。

info = new UTF8Encoding(true).GetBytes(text); 
file.Write(info, 0, text.Length); 

代わりinfo.Lengthを使用します。

はこれをしないでください。

info = new UTF8Encoding(true).GetBytes(text); 
file.Write(info, 0, info.Length); // change this line 
+0

さて、私は、この文字が表示されるときには、カンマを切り捨てることを拒否しました。関連はありませんが、コンマの配置を修正しました。 = P – GaidenFocus

関連する問題