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);没有错。。
不过还是谢谢大家了:-)

参考技术A 编码的问题,换成中文编码方式,比如gb2312;
楼上的那位就行
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#输入输出流中中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

Java IO流中先关闭输出流还是先关闭输入流?为啥?

IO流中的字符输入输出流及try...catch处理流处理中的异常

Java IO流中先关闭输出流还是先关闭输入流?为什么?

关于IO流中的输入流输出流的理解

如何从 BluetoothChat 的输入/输出流中读取/写入原始十六进制字节?

Io流中的其他流