手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网页制作>Flash>列表

用AS2解决中文ID3的乱码

来源:互联网 作者:west263.com 时间:2008-04-02
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  flash假如MP3的ID3标签使用GB2312编码,那么在FLASH脚本输出时是乱码的

  代码1

  var s:Sound=new Sound(this);

  s.loadSound("dxh.mp3",false);

  s.onID3=function(){

  trace(this.id3.songname);

  }

  输出结果是:

  ¶¡Ïã»

  dxh.mp3的ID3v1的标签正确应该是songname="丁香花",看来FLASH在转码上出现了问题。我们来看看songname这个字符串中倒底是什么?

  代码2:var s:Sound=new Sound(this);

  s.loadSound("dxh.mp3",false);

  s.onID3=function(){

   var songname:String=this.id3.songname;

   for(var i=0;i<songname.length;i ){

   trace(songname.charCodeAt(i));

   }

  }

  输出结果是:

  182

  161

  207

  227

  187

  168

  我们使用计算器转换成16进制就是"B6 A1 CF E3 BB A8";

  正好是"丁香花"的GB2312编码,我们还是用FLASH来试试

  System.useCodepage=true;

  trace(unescape("丁香花"));

  输出结果是:

  丁香花

  那么为什么代码1出现乱码现象,是因为FLASH将GB2312当作了UTF-8来解释,我们再来测试一下:

  代码3:

  var s:Sound=new Sound(this);

  s.loadSound("dxh.mp3",false);

  s.onID3=function(){

   var songname:String=this.id3.songname;

   trace(escape(songname));

  }

  结果是:

  ?????¨

  问题的原因我们找到了,只要将GB2312转换成UTF-8编码就能显示正常了,可是假如转换呢,大家注意看代码2,我再测试一下想法

  代码4:

  System.useCodepage=true;

  var gb:String=unescape("丁香花");

  System.useCodepage=false;

  trace(gb);

  trace(escape(gb));

  输出结果:

  丁香花

  涓侀鑺

  第二行就是“丁香花”的UTF-8编码,说明已转换成功了,我们来具体实现这个过程

  class lm.utils.LUTF {

  public function toUTF(source:String):String{

  var target:String="";

  for(var i=0;i<source.length;i ){

  target =this.codeTohex(source.charCodeAt(i));

  }

  System.useCodepage=true;

  target=unescape(target);

  System.useCodepage=false;

  return target;

  }

  private function codeTohex(code:Number):String{

  var low:Number=code;

  var high:Number=(code-low)/16;

  return "%" hex(high) hex(low);

  }

  private function hex(code:Number):String{

  switch(code){

  case 10:

  return "A";

  break;

  case 11:

  return "B";

  break;

  case 12:

  return "C";

  break;

  case 13:

  return "D";

  break;

  case 14:

  return "E";

  break;

  case 15:

  return "F";

  break;

  default:

  return String(code);

  break;

  }

  }

  }

  我们再来测试一下

  import lm.utils.LUTF;

  var u=new LUTF();

  var s:Sound=new Sound(this);

  s.loadSound("dxh.mp3",false);

  s.onID3=function(){

   var songname:String=_root.u.toUTF(this.id3.songname);

   trace(songname);

  }

  输出结果:

  丁香花

  到此为此我们已解决了这个乱码问题,使用这个技巧也能够解决其他的乱码问题

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!