UTF-8, confused...
昨晚熬夜到 2:00 多,把 nirvana 的全部系统页面和我做的 3 个主题都换成了 UTF-8 编码,觉得有很多不明白究竟的地方……
为什么要用 UTF-8?呵呵,这就像我为什么要实践 Web 标准一样,处女座的强迫症倾向使然吧~UTF-8 编码是潮流,而且可以更容易的通过验证,不像用 GB2312 编码时动不动就遇到“包含不可识别的字符”类似的错误。
我现在的了解是,UTF-8 是一种编码格式,一个 HTML 文本文件,要被浏览器按照 UTF-8 来解析的话,并非简单地加上 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 就行,还必须在保存该 HTML 文件时,明确地指定为 UTF-8 编码(即这个文本文件本身就是 UTF-8 编码,默认时会是系统编码,中文版的 Windows 下就是 GB2312)。我常用的 EditPlus 和 VS.NET 都有相应的选项。
但是我的 Blog 显示页面是读取 skin 模版的方式,最后形成一个大的字符串再输出到客户端,目前用的代码是:
Session.CodePage = 65001
Response.ContentType = "text/html; charset=utf-8"
Response.Write xxx
而我打开模版文件则就是简单的 FSO.OpenTextFile() 方法,它并没有指定按照 UTF-8 编码读取文件的参数,只有 ASCII,Unicode 和系统默认。如果把模版文件按照 UTF-8 编码来保存,则会出现乱码……
因此,模版文件除了 CSS 文件以外,我都是按照原先的系统默认编码保存的,CSS 文件存为了 UTF-8 因为在 IE 下显示遇到问题。那么,模版文件中指定编码的 meta 标签就没有意义了,浏览器应该是依据我输出的 HTTP header 信息来决定解析编码的。
那些包括 web 界面的 ASP 文件,我保存为了 UTF-8 编码,并且在页面开始加上了 <%@ CodePage="65001"%> 的导语(2003 下没有这个导语不会有什么问题,2000 下则会出乱码)。
有些晕,不过,反正现在整个 Blog 都是 UTF-8 的了,校验时再也没出现过非编码字符的错误了。
嗯,需要进一步明白 UTF-8 的原理和进行更多实践。
觉得 ASP 对于 UTF-8 的支持有限,.NET 要好太多。
不过,今天发现可以用 Thunderbird 获取我的 Blog 的 RSS 了,以前是 GB2312 编码时它罢工,只能用 FeedDemon。这个是好现象。
还是ISO8859-1兼容性比较可靠。
晕……
在工作期間也寓到 OpenTextFile 同UTF-8的問題, 最後用了這個方案去解決問題:
set strm=createobject("adodb.stream")
with strm
.Charset="utf-16" 'or utf-8
.type=2
.open
.loadfromfile "c:/x.xml"
t=.readText
.close
end with
btw, 你的blog很漂亮~