使用StreamWriter在文件中写入Unicode字符串不起作用

时间:2011-11-19 19:45:45

标签: c# .net stream streamwriter

我有这段代码:

string s = "آ";
StreamWriter writer = new StreamWriter("a.txt", false, Encoding.UTF8);
writer.WriteLine(s);

但是当我运行它时,我在a.txt中看不到任何“آ”!! a.txt中没有任何字符串!它是空的!有什么问题!?!谁能帮我???

6 个答案:

答案 0 :(得分:31)

您永远不会Close() StreamWriter

如果你在写完后给writer.Close()打电话,你会看到这个角色。

但是,因为它实现了IDisposable,所以你应该在StreamWriter语句中包含using的创建:

using(StreamWriter writer = new StreamWriter("a.txt", false, Encoding.UTF8))
{
   writer.WriteLine(s);
}

这会关闭你的流。

答案 1 :(得分:5)

根据它的外观,在结束申请之前,你不是Flush()Close() StreamWriterStreamWriter在内部使用缓冲区,在关闭应用程序之前需要刷新,或者StreamWriter超出范围,否则您写入的数据将不会写入光盘。

您可以在完成后致电Close() - 但我建议您使用using语句,以确保您的StreamWriter得到妥善处置。

string s = "آ";

using (StreamWriter writer = new StreamWriter("a.txt", false, Encoding.UTF8))
{
    writer.WriteLine(s);
}

答案 2 :(得分:3)

尝试使用File.WriteAllText("a.txt", s, Encoding.UTF8);

答案 3 :(得分:0)

几点提示:

  • 您是否看到文件中的任何字符代替您所期望的字符?如果不是,你不会冲洗和关闭流
  • StreamWriter应该能够在不必选择编码的情况下编写unicode,但您可以尝试使用UTF32编码。

检查How to: Write Text to a File

答案 4 :(得分:0)

关注,完成导出列表视图的功能,以正确的特殊字符表示:

private void Exportar()
    {
        Encoding encoding = Encoding.UTF8;

        saveFileDialog1.Filter = "Arquivo Excel (*.xls)|*.xls";
        saveFileDialog1.FileName = "logs";
        saveFileDialog1.Title = "Exportar para Excel";
        StringBuilder sb = new StringBuilder();
        foreach (ColumnHeader ch in lstPesquisa.Columns)
        {
            sb.Append(ch.Text + "\t");
        }
        sb.AppendLine();
        foreach (ListViewItem lvi in lstPesquisa.Items)
        {
            foreach (ListViewItem.ListViewSubItem lvs in lvi.SubItems)
            {
                if (lvs.Text.Trim() == string.Empty)
                {
                    sb.Append(" ");
                }
                else
                {
                    string ITEM = Regex.Replace(lvs.Text, @"\t|\n|\r", "");//remover novas linhas
                    sb.Append(ITEM + "\t");
                }
            }
            sb.AppendLine();
        }
        DialogResult dr = saveFileDialog1.ShowDialog();
        if (dr == DialogResult.OK)
        {
            StreamWriter sw = new StreamWriter(saveFileDialog1.FileName, false, Encoding.UTF32);
            sw.Write(sb.ToString());
            sw.Close();
        }
    }

答案 5 :(得分:0)

如果要从包含这些Unicode字符的位置读取文件,然后进行一些修改并写回该文件,则会出现问题。我陷入了同样的问题。这是对我有用的解决方案

从包含Unicode字符的文件中读取数据

List<string>fileData= File.ReadAllLines("URPath",Encoding.Default).ToList());
//Any modifications
File.WriteAllLines("URPath", hstFileData,Encoding.Default);

我知道这并不漂亮,但它确实有效。 希望这可以帮助!