flash学习记事

服务器端传送变量或url交互,涉及到编码的问题,utf-8与gb2312间转码

例:

var blogStr:String = “我是中文”
进行URL编码转义,unicode编码
blogStr = escape(blogStr)
trace(blogStr)
对URL进行解码为ASCII字符
trace(unescape(blogStr));
相关函数参考:
escape(expression:String) : String
将参数转换为字符串,并以 URL 编码格式对其进行编码,在这种格式中,所有非字母数字的字符都替换为 % 十六进制序列。当用于 URL 编码的字符串中时,百分号 (%) 用于引入转义符,不与模运算符 (%) 等效。

unescape(string:String) : String
将参数 x 作为字符串计算,将该字符串从 URL 编码格式解码(将所有十六进制序列转换为 ASCII 字符),并返回该字符串。

需要注意的问题是,flash内部使用utf-8编码格式进行文本处理,所以从外部载入文件例如xml,如果是中文就需要使用utf-8编码实现,使用 gb2312时,设置system.useCodepage=true来通知Flash Player 使用运行播放器的操作系统的传统代码页来解释外部文本文件,但又有一个问题是,如果操作系统本身是英文或其使用的编码不支持中文字符呢?这个在帮助文档中找到了答案:

如果将 system.useCodepage 属性设置为 true,请记住,运行播放器的操作系统的传统代码页必须包含外部文本文件中使用的字型,这样才能显示文本。例如,如果您加载含有中文字符的外部文本文件,则不能在使用 CP1252 代码页的系统上显示这些字符,原因是该代码页不包含中文字符。为了确保所有平台上的用户均可查看 Flash 应用程序使用的外部文本文件,应使所有外部文本文件的编码都是 Unicode,并保留 system.useCodepage 属性的默认设置 false。这会使 Flash Player 将文本解释为 Unicode

结论是,请使用Unicode编码,这样最安全,无论从客户端还是服务器端。
上面说的是载入,另外就是发送了,向服务器端发送中文时,例如与asp、php、jsp等通过post或get传送变量、发送xml数据等包含中文字符,需要进行unicode或gbk的转义,这取决于服务器的配置,显然,与服务器交互是一个传送与载入的过程,既然载入时是使用utf-8,那服务器端编码即是这种格式,在发送数据时候就需要使用escape函数进行转义了,而之前要注意保存该变量原型,在falsh中显示该变量时需要其未转义过的原型,而且该函数会将诸如_,@,?,/等之类的标点符号也进行转义,为避免混乱,请注意需要使用的编码格式,转义,还是不转义?

Leave a Reply

You must be logged in to post a comment.