主题:[原创]VS.NET 2005不认无BOM的utf-8网页
本人擅长于写程序,美工不是我的特长,
所以,网页都是同事做的,我负责把内容提取出来与模板合并。
最后生成目标网页写入磁盘供用户浏览。
我长期以来一直是用ASP写的程序,
近来在研究ASP.NET,由于同时有VB和C++的基础,学C#不在话下,
从ASP转型到ASP.NET只是我的事,与我的同事无关。
所以,我可以放心地把程序提升到ASP.NET,而我的同事可以继续坚持他的习惯。
不过,今天的测试却让我大跌眼镜。
我用VS.net2005写了个“byvs.htm”,
用DreamWeaver写了个“budw.htm”,
网页本身没啥内容,就几个字而已。
结果,DreamWeaver可以打开两个htm文件,显示都正常,
但是VS.NET2005只能打开自己的文件,对于“bydw.htm”,则显示乱码,
问题还没有到此为止,
我直接把内容读出来并送到客户端,居然一切正常,
代码如下:
string s;
s = System.IO.File.ReadAllText(Server.MapPath("~/Template/byvs.htm"));
//s = System.IO.File.ReadAllText(Server.MapPath("~/Template/bydw.htm"));
Response.Write(s);
Response.End();
无论是“byvs.htm”还是“bydw.htm”都能正常读取,也能正常浏览。
把其中第二行改为“s = System.IO.File.ReadAllText(..., Encoding.UTF8);”也正常。
查看两个文件的编码,也的确都是utf-8编码。
也就是说,通过分析可以判断,两个文件都是utf-8编码,
都能正常打开,(无论是记事本还是IE),
就是在VS.net2005中打开这个bydw.htm文件显示有问题。
网上搜了一下,只发现有人提出DreamWeaver打开VS的文件出乱码的,
在我这儿居然发生了相反的现象。
后来就怀疑是否BOM在作怪。
我试着写入BOM,果然问题解决。
结论:DreamWeaver同时支持有BOM和无BOM的utf-8网页,
Visual Studio.net 2005只支持有BOM的,如果没有BOM,估计是当成ansi了。
所以,网页都是同事做的,我负责把内容提取出来与模板合并。
最后生成目标网页写入磁盘供用户浏览。
我长期以来一直是用ASP写的程序,
近来在研究ASP.NET,由于同时有VB和C++的基础,学C#不在话下,
从ASP转型到ASP.NET只是我的事,与我的同事无关。
所以,我可以放心地把程序提升到ASP.NET,而我的同事可以继续坚持他的习惯。
不过,今天的测试却让我大跌眼镜。
我用VS.net2005写了个“byvs.htm”,
用DreamWeaver写了个“budw.htm”,
网页本身没啥内容,就几个字而已。
结果,DreamWeaver可以打开两个htm文件,显示都正常,
但是VS.NET2005只能打开自己的文件,对于“bydw.htm”,则显示乱码,
问题还没有到此为止,
我直接把内容读出来并送到客户端,居然一切正常,
代码如下:
string s;
s = System.IO.File.ReadAllText(Server.MapPath("~/Template/byvs.htm"));
//s = System.IO.File.ReadAllText(Server.MapPath("~/Template/bydw.htm"));
Response.Write(s);
Response.End();
无论是“byvs.htm”还是“bydw.htm”都能正常读取,也能正常浏览。
把其中第二行改为“s = System.IO.File.ReadAllText(..., Encoding.UTF8);”也正常。
查看两个文件的编码,也的确都是utf-8编码。
也就是说,通过分析可以判断,两个文件都是utf-8编码,
都能正常打开,(无论是记事本还是IE),
就是在VS.net2005中打开这个bydw.htm文件显示有问题。
网上搜了一下,只发现有人提出DreamWeaver打开VS的文件出乱码的,
在我这儿居然发生了相反的现象。
后来就怀疑是否BOM在作怪。
我试着写入BOM,果然问题解决。
结论:DreamWeaver同时支持有BOM和无BOM的utf-8网页,
Visual Studio.net 2005只支持有BOM的,如果没有BOM,估计是当成ansi了。