奇了大怪了,C#文件读入后写不了UTF-8编码的文件=========

demoooo 2010-10-22 01:21:07

在项目中用尽了办法还是新建出来的ANSI (GB2312)的文件编码.

先这样读:

string tempaspx = "aspx模板文件路径和文件名";
string Filename = "新建并写入的新文件";

StreamReader sr = new StreamReader(tempaspx, Encoding.UTF8); //tempaspx文件的编码是UTF-8
string tempstr = sr.ReadToEnd(); //读出来的字符,不乱码
sr.Close();

然后写:

StreamWriter sw = new StreamWriter(Filename, false, Encoding.GetEncoding(65001)); //这里给上UTF-8编码参数
sw.Write(strCode);
sw.Flush();
sw.Close();

结果Filename文件写出来正常,在记事本中打开不乱码, 但文件的编码属性变成了GB2312了. 在vs里面打开这个Filename中文就乱码了. 手工将他另外为UTF-8就一切正常. 一个个手工另存太烦了啊. 而新写入的文件编码还一定得要是UTF-8的.

Encoding.GetEncoding(65001) 这样,和 Encoding.UTF8 都试了,就是写不出UTF8编码的文件来.

高手们, 有办法吗?

...全文
254 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
demoooo 2010-10-24
  • 打赏
  • 举报
回复
飞一脚.....
demoooo 2010-10-22
  • 打赏
  • 举报
回复
我突然想起来一个事情, UTF8编码在用SSI的时候会空出一行. 以前还特意把UTF8的标识去掉.

去掉UTF8标识的文件在记事本中能够自动识别. 但是在vs2008不能自动识别了? 可是vs2008配置里面我已经勾选自动识别不带标识的UTF8文件呀.

demoooo 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 viena 的回复:]

代码没问题
但从你的描述中也找不到问题出在哪里

在vs里面打开乱码,肯定是指定的编码与实际编码不符
UTF8文件的开头字节是 EF BB BF
你可以试下用二进制方式写
Encoding.UTF8.GetBytes
FileStream.Write
[/Quote]

刚用hex编辑器特意查看了下. 源文件的文件头是EF BB BF 3C 25 40 20 50 . 然后通过StreamWriter sw = new StreamWriter(Filename, false, Encoding.GetEncoding(65001))保存过后文件的文件头变成了: 3C 25 40 20 50 也就是把EF BB BF这3个字节去掉了.

难道真的是我系统环境出问题了吗
Relict 2010-10-22
  • 打赏
  • 举报
回复

关注
viena 2010-10-22
  • 打赏
  • 举报
回复
代码没问题
但从你的描述中也找不到问题出在哪里

在vs里面打开乱码,肯定是指定的编码与实际编码不符
UTF8文件的开头字节是 EF BB BF
你可以试下用二进制方式写
Encoding.UTF8.GetBytes
FileStream.Write
边城的刀声 2010-10-22
  • 打赏
  • 举报
回复
你不会是看错文件 了吧
heimark2 2010-10-22
  • 打赏
  • 举报
回复
会不会是操作系统环境的原因?
heimark2 2010-10-22
  • 打赏
  • 举报
回复
我试过你的代码,没有问题啊,文件是UTF8格式的.
代码如下:
string tempaspx = "c:\\aa.aspx";
string Filename = "c:\\aaa.txt";

StreamReader sr = new StreamReader(tempaspx, Encoding.UTF8); //tempaspx文件的编码是UTF-8
string tempstr = sr.ReadToEnd(); //读出来的字符,不乱码
sr.Close();

// 然后写:

StreamWriter sw = new StreamWriter(Filename, false, Encoding.GetEncoding(65001)); //这里给上UTF-8编码参数
sw.Write(tempstr);
sw.Flush();
sw.Close();
机器人 2010-10-22
  • 打赏
  • 举报
回复
编码改为GB2312试试。
porschev 2010-10-22
  • 打赏
  • 举报
回复
看不出哪错了。。
jianshao810 2010-10-22
  • 打赏
  • 举报
回复
StreamWriter sw = new StreamWriter(Filename, false, Encoding.UTF8);

难道这样不行吗?
deyygywxf 2010-10-22
  • 打赏
  • 举报
回复
StreamWriter sw = new StreamWriter(Filename, false, Encoding.UTF8);

难道这样不行吗?
lh1611 2010-10-22
  • 打赏
  • 举报
回复
帮顶!!帮顶!!帮顶!!帮顶!!
兔子-顾问 2010-10-22
  • 打赏
  • 举报
回复
你要试试,说不定不是utf8格式的,比如有的网站。写错了。就会查看源码时(浏览器会以正确的编码格式缓存,可能非utf8,)然后打开你看到CodeSet为UTF-8,就用这个打开。就会出错了。
我只是猜测,因为如果文件时utf-8的,那你这么做一定没错。如果错,可能是出现这个错误。猜测。
myhope88 2010-10-22
  • 打赏
  • 举报
回复
期待高手来解决
w250840443 2010-10-22
  • 打赏
  • 举报
回复
我也碰到这样的问题啦 !!!待高手出现
Dogfish 2010-10-22
  • 打赏
  • 举报
回复
直接使用Encoding.UTF8,不知道是否可以。
StreamWriter sw = new StreamWriter(Filename, false, Encoding.UTF8);

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧