Flash+asp输出xml乱码的问题,与IIS和统一编码有关

由 夕空 撰写于  2013年1月26日

在制作flash+asp的交互项目时发现个问题,asp输出的xml供flash读取,flash加载速度慢,且有时会出现读不出的现象,这个原因一直没能解决,搁置了很久。后来又有个项目导致这个现象更加明显,必须得解决这个问题了,自此开始网上大量搜索资料找原因,很多建议都是输出UTF-8国际通用编码,找到下面方法:


ASP采用UTF-8编码 


<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%Response.Charset="utf-8"%>
<%Session.CodePage = "65001"%>


且文件本身用记事本另保存也采用UTF-8
另外FLASH中千万别别别设置System.useCodepage为true  !!!
去掉!!!

照此方法做按理说是没得问题,但。。。异常郁闷,在浏览器上直接访问地址页可正常显示,flash中却看都看不到,之前还有什么乱码现象都不出,这可让我很是恼火,就这样纠结了两天,(千万别在netbox里测试,会报错),最初只好临时找个解决办法,把数据库的信息用asp生成.xml文本文件,但asp不能创建UTF-8编码的.xml文件,只能ANSI,找到方法改Set MyFile = fso.CreateTextFile(xmlfile,True,true),也就是后面多了2个true,这样创建的是Unicode编码的文本文件,好像不是UTF-8的,不过加载慢的问题倒是解决了,或许你会问创建ANSI编码的文本文件不能用嘛?能用,在本地浏览.swf是没啥问题,但在浏览器上访问还是会慢,亲侧!!!
    言归正传,最终还得要解决asp输出xml供flash读取的问题。
除了flash里去掉useCodepage的ture,后来总结了这么几个问题:

1.不要用netbox之类的非专业服务器环境来测试UTF-8编码的程序。

2.flash加载的是输出UTF-8编码的asp,但其它页面或整站却是gb编码的,那么肯定会乱码,且还会导致web页乱码。

3.如果你出现了如2的情况,那么你只好统一编码了,最终我就放弃gb2312编码的网站系统,全部使用UTF-8,flash加载非UTF-8的xml确实会出现加载慢或不出内容的情况。
    以下就是找到的文章才令我茅塞顿开,否则还会令我纠结好久,让后来人少走弯路吧:

------------------------------------------------------
来源:http://webdesign.chinaitlab.com/flashjq/532285.html
从FPV v2开始,Flash+asp乱码的问题一直解决不了,所有可能的方法都试过,最后调试为在标准的 2000 或 2003 服务器下不会乱码。但个人的xp下的iis乱码,始终无法解决,并且是时好时坏。

从一开始怀疑的原因到现在,疑点有下(个人认为):

1. ASP输出的utf-8有问题:

加了 <% CODEPAGE="65001"%> 测试了一遍,自己的IIS(xp)正常,狂欢喜一阵,当在按一下读取按钮时。。。可怕的事情发生了,居然乱码了,到底是为什么?然后把asp文件另存为 unicode 格式。。。再运行,显示读取不了文件,IE里打开,知道asp不能用unicode,记事本另存为里 编码 那有四个,两个带unicode的,一个utf-8,一个系统默认编码,根据做初中英语选择题学的排除法,肯定是utf-8,于是存了这个。再测试,行了!带着恐慌按下去...哎,又乱码了,为什么按第二次就乱码拉?难道是flash问题?(请看下一疑点)

2. Flash的问题:

经过上面的测试,决定把 System.useCodepage 弄为 true ,再测试,更糟,开始就乱码。这没办法啦,但肯定不能再重复上面的,因为已经知道上面的肯定是错误的(结果不是我想要的),只能在弄System.useCodepage=true 的情况下改一下asp编码,去掉了<% CODEPAGE="65001"%> ,测试正常,再按。。也正常,这次真的高兴了。。高兴之余又想。。。也不对阿,我当初就是想要unicode的,这回不是只支持本地编码拉?于是测试韩文写入,哎。。又失望了,证明也不行,再测试把 <% CODEPAGE="65001"%>去掉,另存asp格式为utf-8,这次更更糟,存进去的根本不是东西。。一堆不是乱码的乱码 像这样:鍩冨厠鏂?xml,MD 我急了,咋就搞不定呢!??为啥?点解阿,点解。。(请再往下看)

3. 最终怀疑是。。。(请详细看下面)

我发狂了,我生气了,我想把电脑砸了,我想问为什么要有编码这东西,都用统一的不就行啦,你NND flash,人家IE好好的,到你这就出问题,你NND一开始为什么不想想有这个问题,太气人了,最后狂测试,在以下 去掉<% CODEPAGE="65001"%> 和 另存asp为utf-8 还有 System.useCodepage=true 的三种中组合来组合去,最后弄出个结果,怎么改这三样东西都不行了,要么是读到乱码,要么是存进去乱码,要么是不支持其他语言文字,这下我真的快疯了,最后再弄弄,IIS浏览asp提示连接人数过多。。TMD M$,IIS就我一个人在这看。。你连接什么多阿。。这时,我想把电脑砸了。想我为啥要干这行。IIS不行了,只能在空间上做实验拉,把开始的传上去,一试。。奇迹出现了! 居然行了,读也行了,写也行了,数据库也正常,再看看,难道是我眼花了,用的组合是: asp写上<% CODEPAGE="65001"%> + flash里System.useCodepage=false + asp文件另存为utf-8 。我不知改高兴好还是怎么好。。。此时发现是系统问题,服务器是用2000系统,我的是xp sp2,为了 验证此疑点,我做了以下操作:
(此处简写),我把c给format了,去电脑城4块钱买了一块 2003+2000sp4 的安装碟,开始装系统,开始是2000,装好后测试,正常再不能的正常。再换2003,也没事儿。。看来真是系统问题?(写到此处,此问题已经困扰了我两三天,要不是iis不能浏览,可能还要久)

小结:

此后又进行了N多测试(比上面还要多),得出以下结论,要想 Flash+ASP+ACCESS 支持多语言正常的话,必须:


1.操作系统不能是 windows XP

2.asp必须为utf-8格式,包括输出和文件本身

3.Flash内不要写 System.useCodepage=true

这样做出来的程序如果放在网站上肯定没问题,因为服务器不可能用xp做系统,要么2000要么2003。从去年遇到这个问题,到现在一直都在找方法解决,最后发现,解决不了,xp下的iis怎么测试都是有问题,而2000/2003下什么问题都没有,至于其中内部原因,也没心思去调查了。

共享出来给大家,别误入歧途啊,要做FLASH+ASP+ACCESS项目,千万别用xp系统作测试,否则后果可是不容易解决的,所有此类项目,不用兼容XP!

声明:星耀夕空|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Flash+asp输出xml乱码的问题,与IIS和统一编码有关


欢迎光顾我的小站!