c# 汉字编码

    当用流向文本文件中写入,或用流将文本文件内容读到textbox中是,我们会遇到汉字无法识别,出现乱码等情况,究其原因就是中文系统中文件的编码(encoding)和流的encoding方式不对应。
    文本编辑器(比如XP自带的记事本)在生成文本文件时,如果编码格式和系统默认的编码(中文系统下默认为GB2312)不一致时,会在txt文件开头部分添加特定的“编码字节序标识(Encoding Bit Order Madk,简写为BOM)”,类似PE格式的"MZ"文件头。这样它在读取时就可以根据这个BOM来确定该文本文件生成时所使用的Encoding。这个BOM我们用记事本等程序打开默认是看不到的,但是用stream按字节读取时是可以读到的。我的这个TxtFileEncoding类就是根据这个BOM“文件头”来确定txt文件生成时用到的编码的。
解决方式如下:
    a.对中文文本进行编码,并写入文本文件:
FileStream write  =  File.Create(save.FileName);   // 生成文件流
Byte[] encodedBytes  =   new   byte [rtxtContent.Text.Length  *   2 ];
Encoding.GetEncoding(
" gb2312 " ).GetBytes(rtxtContent.Text,  0 , rtxtContent.Text.Length, encodedBytes,  0 );

write.Write(encodedBytes, 
0 , rtxtContent.Text.Length); // 写入文件
write.Flush(); // 清空缓冲区
write.Dispose(); // 销毁流

    b.对文本文件进行解码,并显示到文本框
1 StreamReader read  =   new  StreamReader(open.FileName, Encoding.GetEncoding( " gb2312 " ));  // 由文件路径生成流,汉字编码
2 rtxtContent.Text =  read.ReadToEnd(); // 读取文件
另注:ISO-8859-1为拉丁字符编码方式

转载于:https://www.cnblogs.com/hustliangchen/archive/2008/05/29/1209994.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值