快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

用AS2解决中文ID3的乱码

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("%B6%A1%CF%E3%BB%A8"));
输出结果是:
丁香花

那么为什么代码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));
}
结果是:
%3F%3F%3F%3F%3F%A1%A7
问题的原因我们找到了,只要将GB2312转变成UTF-8编码就能显示正常了,可是假如转变呢,大家注重看代码2,我再测试一下想法

代码4:
System.useCodepage=true;
var gb:String=unescape("%B6%A1%CF%E3%BB%A8");
System.useCodepage=false;
trace(gb);
trace(escape(gb));
输出结果:
丁香花
%E4%B8%81%E9%A6%99%E8%8A%B1

第二行就是“丁香花”的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%16;
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);
}

输出结果:
丁香花
到此为此我们已经解决了这个乱码问题,使用这个技巧也可以解决其他的乱码问题!


返回类别: Flash教程
上一教程: FlashMX 视频教程(6)-画笔工具的使用
下一教程: 一个简朴的圆形渐变实现复杂的动画效果

您可以阅读与"用AS2解决中文ID3的乱码"相关的教程:
· 中文ID3乱码问题MX解决方案
· Flash 8 中文版视频教程(8)调整颜色
· FLASH:trace()语句无效之解决办法
· AS中getURL存在BUG及详细解决方式
· Flash AS学习:oop的经典教程-as2.0篇
    微笑服务 优质保证 索取样品