| 用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 AS学习:oop的经典教程-as2.0篇
 · Flash 8 中文版视频教程(2)投影
 · Flash 之 Action语句中文全解
 · Flash 8 中文版视频教程(12)打孔
 
 |