c# - StreamWriter 用 GB2312 写文件却生成utf-8乱码文件!?

查看:1112
本文介绍了c# - StreamWriter 用 GB2312 写文件却生成utf-8乱码文件!?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

一段非常简单的写文件代码,发现偶尔生成乱码文件。

string filePath = @"F:\Administrator\Desktop\111.txt";
string str = @"前";
using (StreamWriter sw = new StreamWriter(File.Open(filePath, FileMode.Create), System.Text.Encoding.GetEncoding("GB2312")))
{
    sw.Write(str);
}

生成如下文件:

注:选择以ANSI格式解码则正常显示,说明是用GB2312写的,但生成的文件编码不知为何变成UTF-8

如果把str 改为 "你前"则生成正确ANSI文件

解决方案

这是编辑器的bug,哦不能叫bug,因为GBK编码的前太巧了,巧到编辑器认为这是一个UTF-8编码的字符。
因为它(C7 B0)命中了110yyyyy(C0-DF)10zzzzzz(80-BF)字符范围,编辑器在不确定你文件编码的情况下猜出了utf8编码,于是解码出了一个特殊字符。

而你前的首字符你没有命中utf8字符集范围,最终编辑器使用了设置中的非unicode默认字符集gb2312进行解码得出正确字符。

实际上题主输出的文件字节都是正确的,为了避免此类问题最好还是输出带bom的编码。


老早以前那个记事本保存不了联通的问题类似……

这篇关于c# - StreamWriter 用 GB2312 写文件却生成utf-8乱码文件!?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆