用AS2解决中文ID3的乱码

2008-04-02 10:56:20来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  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));

  输出结果:

  丁香花

  涓侀?鑺?br />
  第二行就是“丁香花”的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);

  }

  输出结果:

  丁香花

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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Flash制作逼真的电流效果动画

下一篇: 完全掌控AS中点(.)语法的应用