问下用stream.write 方法后,读取中文都是问号???。请问这要怎么办呢??折腾了一夜,求高人帮助

时间:2021-02-02 06:49:41
问下用stream.write 方法后,读取中文都是问号??? 

而write方法只能存byte数组。。 存了之后 中文就出不来了~~ 快郁闷死我了,

折腾了一夜,求高人帮助

16 个解决方案

#1


需要将String和Byte[] 之间转换. 网上有很多例子. 要用Unicode Encoding

#2


编码问题啊

#3


建议尝试高级流

FileStream fs = new FileStream("filename", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs); 
sw.WriteLine("使用StreamWriter可以直接向文件中写入字符串,不用转换成byte[]");


FileStream fs = new FileStream("filename", FileMode.Open, FileAccess.WriteRead);
StreamReader sr = new StreamReader (fs); 
string content = sr.ReadToEnd(); //读取全部文件内容

#4


建议尝试高级流

FileStream fs = new FileStream("filename", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs); 
sw.WriteLine("使用StreamWriter可以直接向文件中写入字符串,不用转换成byte[]");


FileStream fs = new FileStream("filename", FileMode.Open, FileAccess.WriteRead);
StreamReader sr = new StreamReader (fs); 
string content = sr.ReadToEnd(); //读取全部文件内容

#5


StreamWriter sw = new StreamWriter("c:\\x.txt", false,System.Text.Encoding.Default);

#6


读到byte数组后,在转成string。
这样:

string ssss = System.Text.Encoding.UTF8.GetString(ByteArray);       //有些文档要用UTF8才能正常显示中文
string ssss = System.Text.Encoding.Default.GetString(ByteArray);    //有些则用Default,具体为啥要看你的那个文档的编码。

#7


读的时候指定编码.写的时候也指定编码

#8


5楼正解!!!!!!!!!!!!!

StreamWriter sw = new StreamWriter("c:\\x.txt", false,System.Text.Encoding.Default);

多加个System.Text.Encoding.Default,中文就不会乱码了

#9


可能我问题问错了。。


                NetworkStream stream = tcpclnt.GetStream();

stream 是网络流

问题就是 stream 已经是网络流了,并且stream 只有 write(bytes数组) 方法

 

#10


引用 9 楼 zhizlm 的回复:
可能我问题问错了。。


NetworkStream stream = tcpclnt.GetStream();

stream 是网络流

问题就是 stream 已经是网络流了,并且stream 只有 write(bytes数组) 方法

那这个byte数组你后来怎么处理了

#11


我后来在服务端也要读这个流,这个流就是bytes数组。

#12


楼主,只要你保证你写入文件的字符串的编码和写出来的用的是同一种编码,那就不会乱吗了


FileStream fs = new FileStream( "filename", FileMode.Create, FileAccess.Write );
StreamWriter sw = new StreamWriter( fs, Encoding.UTF8 );
sw.WriteLine( "使用StreamWriter可以直接向文件中写入字符串,不用转换成byte[]" );


FileStream fs = new FileStream( "filename", FileMode.Open, FileAccess.WriteRead );
StreamReader sr = new StreamReader( fs, Encoding.UTF8 );
string content = sr.ReadToEnd(); //读取全部文件内容



以上的这个实例,就是表示,用的是Utf-8编码保存文件内容
读出来的时候,也是用Utf-8编码来读取,这样就不会乱码了

当然你也可以选择其实编码,你唯一需要保证的就是他们读和取都是一样的编码

#13


网络流也是编码问题,我做过这个东西,默认编码里读不了中文的,必须在读和写入网络流时都用UTF8编码!

#14


  StreamWriter wSScore = new StreamWriter(@"C:\DataMining\OurNeededScore.txt", false, System.Text.Encoding.Default);
            StreamWriter wSSCourse = new StreamWriter(@"C:\DataMining\OurCourse.txt", false, System.Text.Encoding.Default);

这样可以的。

#15


UTF8编码.

#16



FileStream fs = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write, FileShare.None);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Unicode, 1024);

#1


需要将String和Byte[] 之间转换. 网上有很多例子. 要用Unicode Encoding

#2


编码问题啊

#3


建议尝试高级流

FileStream fs = new FileStream("filename", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs); 
sw.WriteLine("使用StreamWriter可以直接向文件中写入字符串,不用转换成byte[]");


FileStream fs = new FileStream("filename", FileMode.Open, FileAccess.WriteRead);
StreamReader sr = new StreamReader (fs); 
string content = sr.ReadToEnd(); //读取全部文件内容

#4


建议尝试高级流

FileStream fs = new FileStream("filename", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs); 
sw.WriteLine("使用StreamWriter可以直接向文件中写入字符串,不用转换成byte[]");


FileStream fs = new FileStream("filename", FileMode.Open, FileAccess.WriteRead);
StreamReader sr = new StreamReader (fs); 
string content = sr.ReadToEnd(); //读取全部文件内容

#5


StreamWriter sw = new StreamWriter("c:\\x.txt", false,System.Text.Encoding.Default);

#6


读到byte数组后,在转成string。
这样:

string ssss = System.Text.Encoding.UTF8.GetString(ByteArray);       //有些文档要用UTF8才能正常显示中文
string ssss = System.Text.Encoding.Default.GetString(ByteArray);    //有些则用Default,具体为啥要看你的那个文档的编码。

#7


读的时候指定编码.写的时候也指定编码

#8


5楼正解!!!!!!!!!!!!!

StreamWriter sw = new StreamWriter("c:\\x.txt", false,System.Text.Encoding.Default);

多加个System.Text.Encoding.Default,中文就不会乱码了

#9


可能我问题问错了。。


                NetworkStream stream = tcpclnt.GetStream();

stream 是网络流

问题就是 stream 已经是网络流了,并且stream 只有 write(bytes数组) 方法

 

#10


引用 9 楼 zhizlm 的回复:
可能我问题问错了。。


NetworkStream stream = tcpclnt.GetStream();

stream 是网络流

问题就是 stream 已经是网络流了,并且stream 只有 write(bytes数组) 方法

那这个byte数组你后来怎么处理了

#11


我后来在服务端也要读这个流,这个流就是bytes数组。

#12


楼主,只要你保证你写入文件的字符串的编码和写出来的用的是同一种编码,那就不会乱吗了


FileStream fs = new FileStream( "filename", FileMode.Create, FileAccess.Write );
StreamWriter sw = new StreamWriter( fs, Encoding.UTF8 );
sw.WriteLine( "使用StreamWriter可以直接向文件中写入字符串,不用转换成byte[]" );


FileStream fs = new FileStream( "filename", FileMode.Open, FileAccess.WriteRead );
StreamReader sr = new StreamReader( fs, Encoding.UTF8 );
string content = sr.ReadToEnd(); //读取全部文件内容



以上的这个实例,就是表示,用的是Utf-8编码保存文件内容
读出来的时候,也是用Utf-8编码来读取,这样就不会乱码了

当然你也可以选择其实编码,你唯一需要保证的就是他们读和取都是一样的编码

#13


网络流也是编码问题,我做过这个东西,默认编码里读不了中文的,必须在读和写入网络流时都用UTF8编码!

#14


  StreamWriter wSScore = new StreamWriter(@"C:\DataMining\OurNeededScore.txt", false, System.Text.Encoding.Default);
            StreamWriter wSSCourse = new StreamWriter(@"C:\DataMining\OurCourse.txt", false, System.Text.Encoding.Default);

这样可以的。

#15


UTF8编码.

#16



FileStream fs = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write, FileShare.None);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Unicode, 1024);