Tinyfool@Csdn

天行健,君子以自强不息----本Blog内容均可转载,但是作者不放弃版权,转载必须标明作者和原文地址。

郝培强ID:tinydust
180553次访问,排名391好友3人,关注者7
tinydust的文章
原创 44 篇
翻译 6 篇
转载 0 篇
评论 506 篇
Tinyfool的公告
CodeChina.Org 中国代码网-中国程序员的代码天堂

银杏泰克科技有限公司[站内搜索解决方案]

全能之眼
Tiny同志在配眼镜

微尘程序员网站

最近评论
Vanel:那么这就match我对Yahoo和Google合作的看法了.
其他不举,想不通为什么说话就不能好好说呢?非要加个英文词。match?match?写汉字符合不行吗?现在CSDN里到处充斥着这种文章。风气么。。
lao1000:有点意思
renxinzhi:不能光看眼前的蝇头小利,与Google合作雅虎失掉的是继续前行的动力,本来广告是雅虎的主业,现在(相当于)把广告卖给Google,连雅虎都失去了对自己的信心,那么怎么让广告客户对它坚定信心呢?由于Google与雅虎是天生的竞争对手,而且Google又在合作中占据强势地位,对两者来说是此消彼长的关系,但是肯定是Google上涨。这样不仅会造成雅虎的客户流失,而且也使由于暂时的获利雅虎失去了继续……
bad__ba:个人觉得如果Google耗巨资来制作系统和应用软件的话,也不会只靠广告来收入,软件收费几乎是必然的。
tinydust::)
文章分类
收藏
    相册
    ATinyGBA
    blog用图
    China Mdc2004
    Tinyfool
    Tinyfool的开发日记(RSS)
    Tinyfool的移动开发阵线(RSS)
    Tinyfool的随想录(RSS)
    微尘程序员网站
    联系Tinyfool
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 服务器端Xslt过程中出现的编码问题和解决方案收藏

    新一篇: 用于Atom转换成rss的xslt文件 | 旧一篇: 用于Atom转换成rss的xslt文件

    服务器端Xslt过程中出现的编码问题和解决方案 

      Xslt文件编写学会以后,在真正的应用中,我还需要利用转换引擎,进行文件的转换。Xslt转换,一般来说分为服务器端转换和客户端转换。服务器端转换,也就是说用asp/jsp代码进行Xslt转换,这样发给用户客户端的是格式化好的Html文件(在Atom2Rss里面是Xml文件。)。客户端转换,是直接发给用户客户端Xml文件,由客户端进行转换,这样就需要客户端支持Xml标准。目前真正完整支持Xml标准的Ie6,Mozilla,而目前还有很多用户还在使用Ie5,甚至是Ie4,或者是其他的不支持Xml的浏览器。所以,在很多时候,我们需要进行服务器端的转换。

      程序代码很简单,下面代码来自Msdn,被我由Vb Script代码改成了Asp代码:


    Dim xslt,xslDoc,xmlDoc,xslProc
    Set xslt=Server.CreateObject("Msxml2.XSLTemplate")
    Set xslDoc=Server.CreateObject("Msxml2.FreeThreadedDOMDocument")
    Set xmlDoc=Server.CreateObject("Msxml2.DOMDocument")
    Set xslProc=Server.CreateObject("IXSLProcessor")
    xslDoc.async = False
    xslDoc.resolveExternals = False
    xslDoc.load "sample.xsl"
    Set xslt.stylesheet = xslDoc
    xmlDoc.async = False
    xmlDoc.resolveExternals = False
    xmlDoc.load "books.xml"
    Set xslProc = xslt.createProcessor()
    xslProc.input = xmlDoc
    xslProc.addParameter "param1", "Hello"
    xslProc.Transform
    Response.write xslProc.output

      
      这个代码很简单也很容易看懂,但是在我真正应用的时候发现一个很痛苦的问题,就是我的Xml文件编码是GB2312,我的Xslt文件编码是GB2312,而且在Xslt里面也设定了输出的Xml文件的编码是GB2312,但是生成的文件的编码却是UTF-16。这样就造成了我的文件编码错误,在IE里面没有办法阅读。

      我在网上搜索这个问题,发现这个问题相当普遍,找到了一个讲得比较清楚的文章RE: [xsl] Problem with Chinese (Solution)
      
      文章的大概意思是:如果你需要生成指定编码的文档,你就不要在代码中使用String。因为在Win32平台里面String的编码总是Utf-16,所以你不能期望MSXML能够输出GB2312的String。如果利用流的方式Load,transformNodeToObject来进行处理,就可以避免这个问题。

      根据这个思路做出来的程序如下:


    dim xsldoc,xmldoc,xmlfile,xslfile

    xmlfile="test.xml"
    xslfile="test.xsl"

    '生成xml转换所需要的对象
    set xslDoc = server.CreateObject("MSXML2.FreeThreadedDOMDocument")
    set xmlDoc =server.CreateObject("MSXML2.DOMDocument")

    '装入xsl文件
    xsldoc.async=False
    xsldoc.resolveExternals =False
    xsldoc.load server.MapPath(xslfile)

    '装入xml文件
    xmldoc.async=False
    xmldoc.resolveExternals =False
    xmldoc.load server.MapPath(xmlfile)

    xmldoc.transformNodeToObject xsldoc,Response
    '进行转换

    '清楚所有内存
    set xslt=nothing
    set xsldoc=nothing
    set xmldoc=nothing
      
      
      至此,问题完全得到解决。

    发表于 @ 2004年03月15日 09:25:00|评论(loading...)|编辑

    新一篇: 用于Atom转换成rss的xslt文件 | 旧一篇: 用于Atom转换成rss的xslt文件

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Tinyfool