Flash与后台编码问题解决新方案

原创 2004年07月05日 17:38:00

在Flash MX的时候开始,就经常有人问为什么Flash载入的中文会是乱码?

后来大家都用了System.useCodePage=true;去解决这个问题。
可能大家都已经习惯了在Flash 5或以前,Flash完全没有理会编码时候吧。
大家都可能觉得,我在Flash5的时候可以很容易的载入外部文本,可以很容易的跟PHP, ASP等等的后台程序作信息交互。但是到了Flash MX的时候,同样的方法却出现了乱码。一定要在前面加上System.useCodePage=true;才可以解决问题。

大家可能都会觉得这是Flash的问题,觉得Flash MX的中文支持能力差了。但是,事实却刚刚相反。Flash MX, Flash 2004这些版本对编码的支持绝对是比Flash5好的。(废话,Flash5都没有任何编码的问题)大家可能对我的话有所怀疑,这不要紧,下面就让我说明一下吧。

大家都知道我们国家就已经有两种不同的编码了,分别是香港,台湾的BIG5和我们内地的GB2312。在 Flash 5或以前,Flash完全没有理会编码问题,所有在Dynamic/Input Textfield显示的中文字,Flash是根据浏览者系统预设编码去显示。香港一般用Big5去编码文字,而大部分人都是用繁体中文Windows, 所以一拍即合,可以显示到中文。对于英文或简体中文Windows浏览者,他们就无法显示到Dynamic/Input Textfield上的Big5编码繁体中文。以前的英文Windows用户,经常要靠外挂中文程式,例如:南极星或Richwin看中文网页,可惜这类 软件对Flash里的中文字无法起作用,依旧是乱码。

但是从Flash MX开始,Flash就开始支持Unicode编码。

Unicode

Unicode能够支持多国不同文字在同一套编码架构中,所以能够在同一篇文章中,同时显示繁简体中文字和其他文字。Flash 6(Flash MX)开始支持Unicode,并将Flash Player 6或以上预设编码为Unicode(如果播放Flash 5的SWF就仍然是根据浏览者系统预设编码去显示),新手不知道这转变,动态载入外部档案,例如:

loadVariablesNum("text.txt", 0);

text.txt这档案里的中文用Big5编码,Flash Player 6则用Unicode,结果当然是显示乱码。

解决方法有两个:
一 强迫Flash使用“Flash 5原来编码方法”,在Frame 1加入指令:
System.useCodepage = true;
如果整个SWF都是使用“Flash 5原来编码方法”,就只需在Frame 1开始加一次便可。

二 使用unicode编码

服务端编程:
1.PHP/ColdFusion的开发者
请把你的PHP/ColdFusion存为UTF-8编码。
文本:文件->另存为->编码->UTF-8
DW2K4:File->New->Preference...->Default encoding->UTF-8
演示地址:
al4u.51.net/test.php



2.ASP的开发者
请把你的ASP存为UTF-8编码。
文本:文件->另存为->编码->UTF-8
DW2K4:File->New->Preference...->Default encoding->UTF-8
然后在顶上多加
<%@ codepage=65001 %>
就可以了
演示:
asp3.6to23.com/littlejie/test.asp

在Flash里面请别加入 System.userCodePage=true;

加了这指令之后,Flash对Unicode的文件将会显示为乱码。也就是说,你不能用Unicode编码了。如果不用utf-8编码,对于 gb2312编码来说,是可以部分兼容繁体中文和一些日文编码的, 那是因为gb2312里面已经包括了这些编码,即所谓的gbk大字符集。这就让很多使用System.userCodePage的人觉得只要默认编码为 gb2312,就可以做到解决编码问题。我在原先做的时候也是这样误解的,那是因为我没有测试别的语言,比如韩文。后来试了韩文之后,发现输入到数据库中 的文字都变成了%#5234;%#1243;这样子的乱码。原来这些特殊语言的编码在gb2312里找不到,所以就被转成了字节编码。

所以,如果你只是想让繁体和简体之间没有编码问题,那只需使用gb2312编码就足够了,ie会帮你转换big5到gb2312。而如果要适应更多语言的浏览器,那么,你就必须使用万国码unicode。不过值得注意的是, 某些数据库不支持unicode。比如早些的mysql,现在的mysql已经支持了。这就需要强行转换编码,可以使用urlencode编码,或者base64也行。读取的时候再反编码回unicode。还有要注意的地方, 就是flash里面的文本框字体不能再用宋体了。而是需要用公用字体,比如Arial。 因为别的语言并没有宋体

Flash跟后台编码解决新方案

在Flash MX的时候开始,就经常有人问为什么Flash载入的中文会是乱码?后来大家都用了System.useCodePage=true;去解决这个问题。可能大家都已经习惯了在Flash 5或以前,...
  • zwkzsj770925
  • zwkzsj770925
  • 2008年08月24日 08:34
  • 166

actionscript(flash)和java后台的数据交互!

这边做一个视频学习网站,遇到了flash中swf文件与java后台的交互(比如视频播放到一半时视频中出现一个问题,只有回答对了问题才能继续学习),而问题内容和答案都在数据库中,所以涉及到AS与java...
  • zml1991105
  • zml1991105
  • 2016年08月19日 13:11
  • 1238

Flash的编解码格式介绍

目前flash player 9+的普及率已经超过了94%,10也接近40%,所以我们这里讨论的flash对视频格式的支持情况也是针对flash 9+的。目前flash(9.0.115.0 +) 支持...
  • shenbin1430
  • shenbin1430
  • 2009年09月10日 12:54
  • 4178

Flash与后台编码兼容性问题的解决方案

从Flash MX发布开始,就经常有人问:为什么Flash载入的中文会是乱码?  后来大家都用了 System.useCodePage=true; 去解决这个问题。可能大家都已经习惯了在Flash 5...
  • ecitnet
  • ecitnet
  • 2007年11月12日 15:48
  • 597

flash与后台数据交换方法

目前据我所知,Flash与后台数据交互共有下列几种方法:    1.LoadVars(XML)    2.Flash Remoting    3.Webservice    4.XMLSocket 一...
  • dengwujie
  • dengwujie
  • 2007年11月10日 00:42
  • 360

flash与java交互数据

//在flash的按钮事件中写这段代码on (press) { //声明一个LoadVars对象用于在 Flash 应用程序和服务器之间传输变量 var sendRequestData:LoadVar...
  • liufei2569
  • liufei2569
  • 2008年06月26日 09:53
  • 1820

[转]flash与后台数据交换方法整理

flash与后台数据交换方法整理1-LoadVars篇 P.S   最近有一些网友总是询问flash与后台数据交互的问题,因此我就做了一些总结和整理,也想方便大家了!   目前据我所知,Flash...
  • freeliver54
  • freeliver54
  • 2007年10月24日 11:58
  • 290

基于 flash AS3.0 的BASE64编码与解码类

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://programmer.blogbus.com/logs/36436446.html 在国外网站上淘到一个很好用的...
  • Manketon
  • Manketon
  • 2014年12月23日 15:21
  • 1260

AJAX与微软的新方案

AJAX与微软的新方案 作者: Tony Patton 2005-10-13 10:35 AM 如果你曾参与过网络开发,那么对你来说,利用远程脚本调用能力、通过AJAX(Asynchronous Ja...
  • RincleWoo
  • RincleWoo
  • 2005年10月18日 11:50
  • 1153

前端、后台、终端交互之编码格式

楼主上周项目遇到一个小问题,具体是这样,因项目需求 我需要上传本地图片到服务器,图片命名方式要求含有中文(用于检索),然后后台提供接口给前端,前端来把照片展示出来,当图片不含中文时,一切正常,当图片含...
  • cai784921129
  • cai784921129
  • 2017年06月19日 16:54
  • 263
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Flash与后台编码问题解决新方案
举报原因:
原因补充:

(最多只允许输入30个字)