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编码问题。

原理不再多说,一个上午的努力最后转化成这样一个编码的类包:

// ==============================================================

package com.nosword.string
{
import flash.utils.ByteArray;
public class UrlMultiEncode
{
    // 这是一个编码转换类

   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]));
    }
    return result;
   }

}
}

// ==============================================================
/*

使用方法,从源代码那里可以看到是静态的函数调用,即:

import com.nosword.string.UrlMultiEncode;
...
..
trace(UrlMultiEncode.urlencodeGB2312("北京欢迎你"));
..

显示结果就是“%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3”,用编码转换小工具解码对比,完全一致,支持不同编码格式的Urlencode终于成功了。

本文转自博客园知识天地的博客,原文链接:AS3中UTF-8、GB2312、BIG5、GBK编码转换类,如需转载请自行联系原博主。

相关文章
|
5月前
|
自然语言处理 JavaScript 程序员
UTF-8 GBK UTF8 GB2312 之间的区别和关系
【8月更文挑战第24天】UTF-8(Unicode Transformation Format-8bit)是一种多字节编码方案,用于解决国际化字符编码问题,英文使用一个字节编码,中文使用三个字节。它涵盖了全球所有国家的字符,具备良好的通用性,可在支持UTF-8的浏览器上显示。尽管可包含字节顺序标记(BOM),但通常不使用。GBK是在GB2312基础上扩展的标准,使用双字节编码,包括所有中文字符,但通用性较弱。UTF-8和GBK之间需通过Unicode转换。对于含有大量英文字符的网站或论坛,使用UTF-8编码可节省存储空间。
110 5
|
存储 JavaScript 程序员
【字符编码详解】ASCII、GB2312、GBK、UTF-8、UTF-16编码与Unicode字符集
【字符编码详解】ASCII、GB2312、GBK、UTF-8、UTF-16编码与Unicode字符集
962 0
|
存储 关系型数据库 MySQL
utf8编码和utf8mb4编码(其它编码简介)
utf8编码和utf8mb4编码(其它编码简介)
401 0
c#之utf8和gb2312互转
c#之utf8和gb2312互转
194 0
.NET 字符串 编码转换 GB2312 UTF8
将 gb2312 转换 utf8 编码 private void button1_Click(object sender, System.EventArgs e) {  byte[] temp;  //将 textBox1.
1622 0
|
Web App开发 存储 Windows
字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?
转自:  http://apps.hi.baidu.com/share/detail/17798660 字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得字符编码的知识。不注意的人可能对这个不在意,但这些名词有时候实在让人迷惑,对想学习计算机知识的人来说,搞懂它也十分重要,我也是在学习中慢慢了解了一些这方面的知识。
1919 0
|
存储 算法 Java
Java编码ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16 编码方式详解
Java编码ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16 编码方式详解
421 0
|
MySQL 关系型数据库 Java
MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码) 前段时间做项目遇到APP评论中有 emoji 表情符号,结果导致插入 MySQL 数据库失败,时隔好久了,现在整理一下。
3387 0