Csharp/C#教程:强制StreamWriter更改编码分享


强制StreamWriter更改编码

我试图使用DialogResultStringBuilder保存文件。 在制作文本后,我调用以下代码来保存文件:

  if (dr == DialogResult.OK) { StreamWriter sw = new StreamWriter(saveFileDialog1.FileName); sw.Write(sb.ToString()); sw.Close(); } 

我尝试将第二个参数添加到StreamWriter作为Encoding.UTF8但由于第一个参数是string而不是Stream ,因此它不会编译它。

如何将该字符串转换为流,以便能够将第二个参数作为编码传递?

这个的原因,是在我的文本中的某个地方我有µ但是当文件被保存时它显示像μ所以µ被搞砸了!

谢谢

只需将其包装在FileStream

 StreamWriter sw = new StreamWriter( new FileStream(saveFileDialog1.FileName, FileMode.Open, FileAccess.ReadWrite), Encoding.UTF8 ); 

如果要追加,请改用FileMode.Append

您还应该在try/finally块上调用Dispose() ,或者在超出using范围时使用using块来处置该对象:

 using( var sw = new StreamWriter( new FileStream(saveFileDialog1.FileName, FileMode.Open, FileAccess.ReadWrite), Encoding.UTF8 ) ) { sw.Write(sb.ToString()); } 

这将正确关闭并在所有exception路径中处理流。

filename,appendMode,encoding有一个构造函数。

使用正确的using块,它看起来像:

 if (dr == DialogResult.OK) { using (StreamWriter sw = new StreamWriter(saveFileDialog1.FileName, false, Encoding.UTF8)) { sw.Write(sb.ToString()); //sw.Close(); } } 

有一个StreamWriter(字符串路径,bool追加,编码编码)构造函数 – 您可以只显式指定追加标志吗?

我说你应该把你的StreamWriter包装成一个using ,即

 if (dr == DialogResult.OK) { using(StreamWriter sw = new StreamWriter(saveFileDialog1.FileName, false, Encoding.UTF8)) { sw.Write(sb.ToString()); sw.Close(); } } 

虽然实际上这不会有任何区别。 这有效地为代码提供了一个try / finally,以便StreamWriter得到清理(即使在此期间抛出exception,它也会调用sw.Dispose() 。(有些人会说这也意味着你不再需要.Close因为Dispose也会照顾它,但我还是喜欢它。)

使用阿拉伯字体设置UTF8编码是我做过的最好的事情:

上述就是C#学习教程:强制StreamWriter更改编码分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

  using (var sw = new StreamWriter( new FileStream(temporaryFilePath, FileMode.Create, FileAccess.ReadWrite), Encoding.UTF8)) { sw.Write(sb.ToString()); } ) 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/988107.html

(0)
上一篇 2021年12月23日
下一篇 2021年12月23日

精彩推荐