3

SQLデータベースからデータを取得し、開発環境としてWebアプリケーションを使用して、コンマ区切りファイルとして「.txt」を保存しています。私が抱えている唯一の問題は、最初の列の先頭にいくつかのガベージ文字が追加されることです。

元。¼¤日付、時刻

Encoding.ASCII新しいものを使用しようとしましUTF8Encoding(false)たが、バグを解決しました。

しかし、残りのデータは完璧です。以下のコードは、データの保存に使用されるコードです。

        System.IO.StringWriter sWriter;
        System.Text.StringBuilder sb = new System.Text.StringBuilder();

        sWriter = new System.IO.StringWriter(sb);
        string Str;

        for (int k = 0; k < (grdGridView.Columns.Count); k++)
        {
            if (k == (grdGridView.Columns.Count) - 1)
                sWriter.Write(grdGridView.HeaderRow.Cells[k].Text);
            else
                sWriter.Write(grdGridView.HeaderRow.Cells[k].Text + ","); 
        }

        sWriter.WriteLine("");

        for (int i = 0; i < (grdGridView.Rows.Count); i++)
        {

            for (int j = 0; j < (grdGridView.Columns.Count); j++)
            {

                Str = (grdGridView.Rows[i].Cells[j].Text.ToString());

                if (Str == "&nbsp;")
                    Str = "";

                if (j != (grdGridView.Columns.Count) - 1)
                { Str = (Str + ","); }

                sWriter.Write(Str);
            }
            sWriter.WriteLine();
        }
        sWriter.Close();

        // Download File Directly to Web Server
        //string HtmlInfo = sWriter.ToString().Trim();
        string HtmlInfo = sWriter.ToString();
        string DocFileName = fileName1 + ".txt";
        string FilePathName = Server.MapPath("~/Download");
        FilePathName = FilePathName + "\\" + DocFileName;
        File.Delete(FilePathName);
        FileStream Fs = new FileStream(FilePathName, FileMode.Create);
        BinaryWriter BWriter = new BinaryWriter(Fs, Encoding.GetEncoding("UTF-8"));
        BWriter.Write(HtmlInfo);
        BWriter.Close();
        Fs.Close();
4

3 に答える 3

3

先頭の文字は、Unicodeのバイト順マークです。

new UTF8Encoding(false)の代わりにを使用して、BOMの出力を無効にすることができますEncoding.GetEncoding("UTF-8")

于 2012-09-20T06:41:20.583 に答える
2
 string HtmlInfo = sWriter.ToString();
 ....
 BinaryWriter BWriter = ...
 BWriter.Write(HtmlInfo);

ここでは、BinaryWriterを使用してもほとんど意味がありません。表示される文字は、BinaryWriterによって文字列の前に付加される長さプレフィックスです。

代わりにTextWriterを使用するか、sWriterのコンテンツをとして取得してbyte[]ください。

于 2012-09-20T06:59:45.430 に答える
1

.GetEncoding( "UTF-8")の代わりにEncoding.ASCIIを試してください

于 2012-09-20T06:40:38.447 に答える