2

私が作成している csv でストリームライターが誤った文字を作成するという問題があります。文字は、ファイルの先頭にのみ表示されます。

5,"GEN",555555555,,"Evan","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"email@someplace.com"
5,"GEN",555555555,,"Dorathy","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"email@someplace.com"
5,"GEN",555555555,,"Marvin","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"email@someplace.com"
....

エンコーディングの問題のように見えます。私は別のエンコーディングと、文字列をきれいにする正規表現を試しましたが、ほとんど運がありませんでした。プレビュー用のコードを次に示します (複雑ではありませんが)。また、Webプロセスとして実行されています。

string fileName = includeEmail == false ? "attachment; filename=stuacct_batch.txt" : "attachment; filename=rentals.csv";
Context.Response.Clear();
Context.Response.AddHeader("content-disposition", fileName);
Context.Response.ContentType = includeEmail == false ? "text/plain" : "text/csv";

using (StreamWriter sw = new StreamWriter(Response.OutputStream, Encoding.UTF8))
{   
    string line = "";
    foreach (Student s in students)
    {
        // ... some logic above that that's misc. to this problem 
        line = "5,\"GEN\"," + s.StudentNumber + ",,\"" + s.FirstName + "\",\"" + s.LastName + "\",,,,,,,,,,,,,,,,,,,,,,,,,\"" + s.Email + "\"";
        sw.WriteLine(line);
    }
}

Context.Response.End();
Context.Response.Flush();
Context.ApplicationInstance.CompleteRequest();
4

2 に答える 2

8

ストリームに UTF-8 エンコーディングを使用することを指定しましたが、これらの最初のバイトは有効な UTF-8 バイト オーダー マーク (BOM) です。問題は、ビューア/エディタが UTF-8 ストリームを正しくデコードしていないことです。BOM だけが問題で、BOM なしでストリームを作成したい場合は、UTF8Encodingクラスの独自のインスタンスを作成できます。

var encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false);
using (StreamWriter sw = new StreamWriter(Response.OutputStream, encoding)) ...

本当に ASCII データで作業したい場合は、代わりにそのエンコーディングを使用する必要があります。

using (StreamWriter sw = new StreamWriter(Response.OutputStream, Encoding.ASCII)) ...
于 2012-04-25T15:42:49.533 に答える
0

これらはおそらく、ファイルが ansi ではなく Unicode であることを示す文字です。

ファイルを ANSI ファイルとしてテキスト エディタで開いていますか? もしそうなら、それがあなたがキャラクターを見ている理由です. Unicode として開くか、エンコーディングを Unicode 以外に設定してください。

于 2012-04-25T15:32:58.883 に答える