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

本文关键字:Unicode 字符串 工作 StreamWriter 文件 使用 | 更新日期: 2023-09-27 18:15:16

我有这样的代码:

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

但是当我运行它时,我在a.t txt中看不到任何"_"!!txt中没有任何字符串!它是空的!有什么问题吗?有人能帮帮我吗?

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

你永远不能把Close()变成StreamWriter

如果你写完后调用writer.Close(),你会看到这个字符。

但是,由于它实现了IDisposable,您应该将StreamWriter的创建封装在using语句中:

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

从外观上看,您在结束应用程序之前没有对Flush()Close()进行StreamWriter处理。StreamWriter在内部使用一个缓冲区,在您关闭应用程序或StreamWriter超出作用域之前需要刷新该缓冲区,否则您写入的数据将不会写入磁盘。

你可以调用Close()一旦你完成-虽然我建议使用using语句,而不是也确保你的StreamWriter得到妥善处置。

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

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

几点提示:

  • 你是否看到文件中有字符被写在你期望的地方?如果没有,则没有刷新并关闭流
  • StreamWriter应该能够编写unicode而不必选择编码,但您可以尝试使用UTF32编码。

查看如何:将文本写入文件

使用正确的特殊字符完成将listview导出到excel的功能:

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();
        }
    }

如果您想从包含这些Unicode字符的地方读取文件,然后进行一些修改并写回文件,问题就出现了。我也遇到了同样的问题。这是我的解决方案

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

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

我知道这不是很漂亮,但它工作。希望这对你有帮助!