zoukankan      html  css  js  c++  java
  • AS3中UTF8转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
     {
        // 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终于成功了。
    
    */
    
  • 相关阅读:
    Java学习笔记21---内部类之对成员内部类的补充说明(二)(修正)
    Java学习笔记20---内部类之对成员内部类的补充说明(一)
    Java学习笔记19---内部类之简介成员内部类、局部内部类及匿名内部类
    Java学习笔记18---final关键字修饰变量、方法及类
    Java学习笔记17---成员方法的重载与重写
    Java学习笔记16---抽象类与接口的浅显理解
    Java学习笔记15---instanceof与向下转型
    把大端、小端与堆、栈的生长方向联系起来记忆
    2020综合实践—第7次实践作业 03组
    2020综合实践 第6次实践作业 03组
  • 原文地址:https://www.cnblogs.com/AS30/p/3113255.html
Copyright © 2011-2022 走看看