AS3中UTF-8转GB2312、BIG5、GBK编码的类包
字符编码一直以来都是很混乱,非常让人令人头痛的问题,许多新手往往就会卡死在这个地方。出现乱码常见于读取、提交和写入这三个环节,稍微处理不好这个问题,结果都会演变变成乱码。 归根到底是由于各家使用的编码格式不同造成的,而且往往涉及到系统本身。 国内常用的网络编码格式有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 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | // ============================================================== package com.nosword.string { import flash.utils.ByteArray; public class UrlMultiEncode { // this is an encode class by http://www.nosword.com public function UrlMultiEncode(): void { } public static function urlencodeGB2312(str: String ): String { var result: String = "" ; var byte:ByteArray = new ByteArray(); byte.writeMultiByte(str, "gb2312" ); for ( var i: int ;i<byte.length;i++){ result += escape ( String .fromCharCode(byte[i])); } return result; } public static function urlencodeBIG5(str: String ): String { var result: String = "" ; var byte:ByteArray = new ByteArray(); byte.writeMultiByte(str, "big5" ); for ( var i: int ;i<byte.length;i++){ result += escape ( String .fromCharCode(byte[i])); } return result; } public static function urlencodeGBK(str: String ): String { var result: String = "" ; var byte:ByteArray = new ByteArray(); byte.writeMultiByte(str, "gbk" ); for ( var i: int ;i<byte.length;i++){ result += escape ( String .fromCharCode(byte[i])); } // trace(result); return result; } } } // ============================================================== /* 使用方法,从源代码那里可以看到是静态的函数调用,即: import com.nosword.string.UrlMultiEncode; ... .. trace(UrlMultiEncode.urlencodeGB2312("北京欢迎你")); .. 显示结果就是“%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3”,用编码转换小工具解码对比,完全一致,支持不同编码格式的Urlencode终于成功了。 */ |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步