C# streamwriter方法写入汉字时乱码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# streamwriter方法写入汉字时乱码相关的知识,希望对你有一定的参考价值。

我的代码是这样的
StreamWriter sr = new StreamWriter("xingjian.txt", true);
sr.WriteLine("\n" + this.textBox1.Text + " " + this.textBox2.Text + " " + this.textBox3.Text);
sr.Close();
将输入到文本框中的信息保存在xingjian记事本中,当输入汉字时就会出现乱码!那位高手请指点指点,谢谢!!!

注意:汉字使用GB2312编码

测试页面代码:

using System;
using System.Collections.Generic;
using System.Text;

namespace StreamReaderAndStreamWriter

class Program

static void Main(string[] args)

Console.WriteLine("读取文本文件内容");
Console.Write("输入文本文件所在目录:");
string sBaseFile = Console.ReadLine();
StreamReaderAndStreamWriter.ReadFile(sBaseFile);
Console.WriteLine("追加文件");
StreamReaderAndStreamWriter.AppendText(sBaseFile);



类页面代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace StreamReaderAndStreamWriter

class StreamReaderAndStreamWriter

//读取文本文件
public static void ReadFile(string sFile)

if (File.Exists(sFile))

//获取一个文件流对象,用于读写文件
FileStream fs = File.OpenRead(sFile);
//获取一个指向文件流的流读取器
StreamReader sr = new StreamReader(fs,Encoding.GetEncoding("gb2312"));//以gb2312编码读取文本文件中的汉字,要不然,读取的内容中如果有汉字,则显示为乱码。
//读取所有文本内容
string data = sr.ReadToEnd();
//关闭对象,释放资源
sr.Close();
fs.Close();
Console.WriteLine(string.Format("读取文件>>0", sFile));
Console.WriteLine(data);

else
Console.WriteLine(string.Format("0不存在",sFile));

//追加文本文件
public static void AppendText(string sFile)

if (File.Exists(sFile))

//编辑文本文件
Console.WriteLine("输入写入内容");
string swrite = Console.ReadLine();
//获取一个指向文件流的流编辑器
StreamWriter sw = new StreamWriter(sFile, true, Encoding.GetEncoding("gb2312"));//这里很重要,看一下这个StreamWriter()格式就一目了然了,sFile声明了文本对象;true声明了可以进行Appedn;Encoding.GetEncoding("gb2312")声明了一GB2312编码向文本文件写入内容,这样就可以避免写入汉字出现乱码。
sw.Write(swrite);
//关闭对象,释放资源
sw.Close();
//fs.Close();
Console.WriteLine("向0中追加文件",sFile);

else
Console.WriteLine("0不存在",sFile);


参考技术A StreamWriter sr = new StreamWriter("xingjian.txt", true,System.Text.Encoding.Default);

编码的问题咯!本回答被提问者和网友采纳

c# streamWriter 的write方法是添加还是覆盖??

streamWriter 的write方法好像是可以向文件末尾添加字符串,例如:

streamWriter my = new streamWriter(“C:\\test”);
my.write("OK"); my.flush();

那么write方法能否覆盖文件内容呢??

另外,我用write()方法时发现,如果后面没有flush()语句,就不能真的写入文件,为什么??

我觉得应该这样理解,首先你在streamWriter my =new streamWriter("c:\\text",true);就可以添加到这个txt文件中,如果没有true的话,就默认为替换。然后flush()我理解为streamwriter的方法只是将内容放在内存中,并没有真正的写到文件中,flush()清空内存,将数据写到文件中。 参考技术A StreamWriter.Write 是追加,而且是前面。例如原文本是 123456,当你 Write(“789”)后得到的结果是 789123456。
如果你是要替换该文件的内容,你可以使用 FileInfo 对象,指向你需要替换的文件,先用 FileInfo.Delete 将其删除,再写入就是新内容了。
我不会 C#,我这是 VB 的:
If fi文件 IsNot Nothing Then
fi文件.Delete()
Using sw As New StreamWriter(fi文件.OpenWrite)
sw.Write(txt主.Text)
End Using
Else
Dim sfd As New SaveFileDialog
With sfd
If di当前文件夹 Is Nothing Then
.InitialDirectory = FileIO.SpecialDirectories.MyDocuments
Else
.InitialDirectory = di当前文件夹.FullName
End If
.Filter = ("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*")
.AddExtension = True
If .ShowDialog = DialogResult.OK Then
fi文件 = New FileInfo(.FileName)
fi文件.Delete()
Using sw As New StreamWriter(fi文件.OpenWrite, System.Text.Encoding.Default)
sw.Write(txt主.Text)
End Using
End If
End With
End If
boo是否更改 = False
fi当前文件 = fi文件
Me.Text = fi当前文件.Name & "-文本编辑器"
用 Using 可以保证 End Using 之后写入文件……
参考技术B write方法不会覆盖文件内容```
my.flush(); //是清空缓存区的垃圾
不清空可能出错```本回答被提问者采纳

以上是关于C# streamwriter方法写入汉字时乱码的主要内容,如果未能解决你的问题,请参考以下文章

sqlite乱码

C# - 锁定和 StreamWrite 问题(多线程)

StreamReader和StreamWriter中文乱码问题

C# 单元测试 StreamWriter 参数

C#中StreamWriter类使用总结

c# StreamWriter 应用中,我想每一行中写入两个不同性质的数据,该怎么写呢