最近做了一个 ASP.NET 的文档管理程序,有点类似于简化的 SharePoint Portal Server 2001,有兴趣的可以看看程序运行的截图 (多图)。
在开发过程中,陆续碰到和解决了一些不常见的问题,我会慢慢把这些问题和解决的办法都写出来。代码目前还有点乱,过两天再整理一下,请 Ma Qi、JGTM’2004、kaneboy 等几位高手帮我做一下 Code Review 或 Refactory。
前两天,在修改 ASPX 页面时,发现一个奇怪的问题,链接的CSS 文件里指定的其它设置都管用,就是字体名称设置不管用,如果直接在 ASPX 页面中指定字体名称(Style=”font-family:宋体”)就是正常的。
为了测试,我用 FrontPage 新建了一个 HTML 页面并链接了CSS 文件,页面显示正常,但当我把 HTM 后缀改成 ASPX 后,又失效了。
难道是 ASPX 和 CSS 有冲突? 可这两个东西风马牛不相及呀,于是仔细对比 HTM 和 ASPX 页面的源码,没有发现任何不同的地方,真是百思不得其解。最后终于无意中发现,HTM 页面和 ASPX 页面的编码方式不一样,HTM 是 GB2312 ,ASPX 是 UTF-8(即使其中含有 <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″> 的标记)。
到此时我才明白,原来就是因为 ASPX 的输出编码为 Unicode,在处理 CSS 中的中文字体名(如“宋体”,“黑体”)时出错了错误,导致不能正确显示指定的字体。
处理办法:
1) 将 ASP.NET 的默认编码方式由 UTF-8 改为 GB2312 ;
不过,现在都搞全环化、国际化,还是用 UTF-8 好。
2) 将 CSS 文件中的中文字体名变为英文名称;
如 “Font-Family: 宋体” 改为 “Font-Family: SimSun” ,其它字体的英文名称如:SimYou 幼圆; SimHei 黑体; SimKai 楷体; SimFang 仿宋; SimLi 隶书等。
3) 将 CSS 文件中的中文字体名改为 Unicode 表示(\u…)
此种方法未试验,不知是否可行。
至于为什么我一定要用中文字体呢,原因是中文字体是等宽的,在处理页面时,能很精确控制元素的宽度,这样有利于版面的设计,我对软件界面的要求是很高的
但中文字体中的英文太难看了,不知道当初是哪家公司做的。因为这个我坚决不用中文界面的软件。我一般都是在VMWare中跑中文界面的软件。
多谢老兄信任!
BTW: 关于CSS编码的问题可以试一下在VS.NET中另存为对话框中点出Save按钮的下拉菜单,里面有可以指定编码方式的保存,选择所需的编码保存即可。同理,对于有些.js/.vbs脚本文件也时常会出现功能异常的情况,多半也是编码不同所致。
没错,我写code formatter htc的时候因为类似问题花了我2个多小时直到不情愿的进入debug以后才发现是中文注释问题。(相同的HTC在html中运行完全正常,在.aspx中就错了)
还是 JGTM’2004 厉害,你的处理办法最优 🙂 ..
我曾经尝试将其存为 Unicode 格式,但没有注意 Save 竟然可以下拉 🙁
@JGTM’2004
啊,早说呢,以前有个脚本就是meizz的日历控件。我在asp.net
怎么都不好用,最后只好很不情愿的使用了 #include.
刚才回去试了一下,一试就灵。:D
@moslem:
有空再去看看Open File那个对话框里面的Open按钮……嘿嘿!
还是 JGTM高!
学到"Font-Family: 宋体" 改为 "Font-Family: SimSun,但不明白
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 和CONFIG里的UTF-8 区别??
如果我网页META指定是GB2312,是不是应该把CONFIG里的UTF-8也相应改成GB2312呢?不改又会怎么样??
moslem,俺给你捧场来罗:)
其实你这个问题除了JGTM的方法外,还有有个更好的办法解决:
修改web.config中的<globlization>中的reponseEncoding属性为gb2312,<globlization requestEncoding=gb2312 responseEncoding=gb2312>。
如此一来,response的html都是以GB2312进行编码,而你的source code仍旧可以使用utf-8保存,何乐而不为呢?:)
没错,这个问题我也碰到过,CSS不管如何弄都不起作用,我找了好久才找到问题所在,74了。
谢谢,学习一下!~
我在写htc的时候也遇到这个问题,在web.config里修改globalization节点的requestEncoding和responseEncoding的属性值为GB23112解决了这个问题,但是也面临国际化的问题。
在HTML页面中插入一张图片,如图图片名称是中文,即不能正常显示,请问,如何解决?
各位高手,不错么,谢谢大家的发言
不只是CSS呀,JS里也是,我在JS文件中使用了带有中文的字符串,脚本就会报错!真要命!这个问题怎么解决呀?
入门级,来这儿一看,长见识不少,谢谢!
我也遇到这个问题,用的一个时间控件,不能正常使用,就在Web.config里面修改了编码格式。结果控件是能正常显示了,可是原来页面上的字体设置权都不起作用了。
这是怎么回事啊?
呵呵,谢谢,这个问题困扰我很久了,今天终于知道了答案
请教大家!!!我在DW2004中打开.aspx文件时,它显示的是中文,不是乱码,但我在运行时,不管是用绝对路径还是相对路径,运行都是乱码?这到底是怎么回事呀?烦请大家帮忙?这个问题都困扰了我好长时间了!
多谢楼主!
解决了css字体不起作用的问题
3q~
谢谢, 我以前还奇怪汉字字体怎么在css不起作用, 原来是字符集的原因, VS就该把所有文件的字符集默认为utf-8
怎么我只是黑体管用啊,其他字体改了都不管用?
SimYou 幼圆; SimHei 黑体; SimKai 楷体; SimFang 仿宋; SimLi 隶书等。