C#输入输出流中中文乱码问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#输入输出流中中文乱码问题相关的知识,希望对你有一定的参考价值。
小弟C#新手,第一次做此类程序,要从类似如下的文件中读出中文选项:
AcDbLayerTableRecord
2
中文
70
0
62
7
6
Continuous
370
-3
390
F
1001
AcAecLayerStandard
1000
EOF
具体代码如下:
private void ReadLayerFromFile(string textfile)
//textfile是传入的文件路径
string line1 = "";
string line2 = "";
string line3 = "";
theSourceFile = new FileInfo(textfile);
//StreamReader reader = null;
StreamReader reader = new StreamReader(textfile, Encoding.Default);
try
reader = theSourceFile.OpenText();
catch (FileNotFoundException e)
MessageBox.Show(e.FileName.ToString() + " is not found");
do
if (line1 == "AcDbLayerTableRecord")
//将读出的中文放进listbox
lb1.Items.Add(line3);
GetLineCouple(reader, out line1, out line2, out line3);
while (line3 != "EOF");
reader.DiscardBufferedData(); //reader is cleared...
theSourceFile = null;
reader.Close();
private void GetLineCouple(StreamReader theReader, out string line1, out string line2, out string line3) //this method is used to iterate through the text file and assign values to line1、line2 and line3
line1 = line2 = line3 = "";
if (theReader == null)
return;
line1 = theReader.ReadLine();
if (line1 != null)
line1 = line1.Trim();
line2 = theReader.ReadLine();
if (line2 != null)
line2 = line2.Trim();
line3 = theReader.ReadLine();
if (line3 != null)
line3 = line3.Trim();
请各位高手指点迷津,如何能让LISTBOX显示出的东西不是乱码,或者有更好的读取方法也请指点··谢谢
找到问题所在了:
theSourceFile = new FileInfo(textfile);
reader = theSourceFile.OpenText();
这两句话让reader的内容是从theSourceFile传过来的,不是自己读的。只需要删除这两句,直接
reader.ReadLine();就行了
StreamReader reader = new StreamReader(textfile, Encoding.Default);没有错。。
不过还是谢谢大家了:-)
楼上的那位就行
StreamReader reader = new StreamReader(textfile, Encoding.GetEncoding("gb2312")); 参考技术B 编码问题:webconfig中加这个:
<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312"/>
就行了~ 参考技术C web.config中加如下节:
<globalization requestEncoding="gb2312" responseEncoding="gb2312"/> 参考技术D 把这条 StreamReader reader = new StreamReader(textfile, Encoding.Default);
改成
StreamReader reader = new StreamReader(textfile, Encoding.GetEncoding("gb2312"));
试试看。本回答被提问者采纳
Servlet中文乱码解决方法
程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。
字节流和字符流的区别:
在Java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。
在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,主要用来处理字节或二进制对象,字节流处理单元为1个字节,操作字节和字节数组;
在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成,主要用来处理字符或字符串,字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串。
(这四个都是抽象类)
使用字符流输出数字默认被认为是ASCII
response.getWriter().write(65); 显示结果是 A response.getWriter().write(65 + ""); 线上方结果为 65
字节流输出中文:
//拿到输出字节流对象 ServletOutputStream sos = response.getOutputStream(); byte[] bs = "大家一起去请假!!!".getBytes("UTF-8"); //告诉服务端所用的编码,通知浏览器要查询的码表 response.setContentType("text/html;charset=UTF-8"); sos.write(bs);
字符流输出中文
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("不流泪的机场"); }
下载中文文件名的文件
以上是关于C#输入输出流中中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章
IO流中的字符输入输出流及try...catch处理流处理中的异常