AS3中UTF

字符编码一直以来都是很混乱,非常让人令人头痛的问题,许多新手往往就会卡死在这个地方。出现乱码常见于读取、提交和写入这三个环节,稍微处理不好这个问题,结果都会演变变成乱码。 归根到底是由于各家使用的编码格式不同造成的,而且往往涉及到系统本身。 国内常用的网络编码格式有UTF-8、GB2312、GBK,以及繁体字的BIG5,这几个编码之间的转换郁闷了好多人。 在ActionScript 3 内部无论出和入都统一使用Unicode,但服务器那边却是千奇百怪的编码,例如Google使用UTF-8,百度似乎是GBK。于是向百度这样的服务端发出URLRequest请求百分百会出现乱码,无论设置什么Content Type 或者Post Method都如此,因为AS3输出的是UTF,而百度不接受这样的编码。而URLRequest本身也不支持自定义编码,百度服务端用什么编码也不是我们能控制的,所以烦死人的问题就这样出来了。唯一能让我们控制的只有AS3,所以解决办法还是要从AS3上去考虑。浪费了大量时间去查阅,基本没有人提到URL编码的问题。最后终于找到解决的思路,就是利用ByteArray对象的编码转换和存储功能,活用ByteArray类,能处理绝大部分的AS3编码问题。 原理不再多说,一个上午的努力最后转化成这样一个编码的类包:

1// ============================================================== 2 3package com.nosword.string 4{ 5 import flash.utils.ByteArray; 6 public class UrlMultiEncode 7 { 8 // this is an encode class by http://www.nosword.com 9 public function UrlMultiEncode():void 10 { 11 } 12 13 public static function urlencodeGB2312(str:String):String{ 14 var result:String =""; 15 var byte:ByteArray =new ByteArray(); 16 byte.writeMultiByte(str,"gb2312"); 17 for(var i:int;i<byte.length;i++){ 18 result += escape(String.fromCharCode(byte[i])); 19 } 20 return result; 21 } 22 23 public static function urlencodeBIG5(str:String):String{ 24 var result:String =""; 25 var byte:ByteArray =new ByteArray(); 26 byte.writeMultiByte(str,"big5"); 27 for(var i:int;i<byte.length;i++){ 28 result += escape(String.fromCharCode(byte[i])); 29 } 30 return result; 31 } 32 33 public static function urlencodeGBK(str:String):String{ 34 var result:String =""; 35 var byte:ByteArray =new ByteArray(); 36 byte.writeMultiByte(str,"gbk"); 37 for(var i:int;i<byte.length;i++){ 38 result += escape(String.fromCharCode(byte[i])); 39 } 40// trace(result); 41 return result; 42 } 43 44 } 45} 46 47// ============================================================== 48/* 49 50使用方法,从源代码那里可以看到是静态的函数调用,即: 51 52import com.nosword.string.UrlMultiEncode; 53... 54.. 55trace(UrlMultiEncode.urlencodeGB2312("北京欢迎你")); 56.. 57 58显示结果就是“%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3”,用编码转换小工具解码对比,完全一致,支持不同编码格式的Urlencode终于成功了。 59 60*/
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript日期

日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用

AS3中UTF - HelloWorld