使用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中没有任何字符串!它是空的!有什么问题吗?有人能帮帮我吗?
你永远不能把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);
我知道这不是很漂亮,但它工作。希望这对你有帮助!