FlashLight | 手电筒

For Flashers

原创 中文ID3在Flash中乱码问题的解决方案(MX版)

新一篇: AS2Doc: 一个AS文档生成软件

針對云开的 <用AS2彻底解决onID3的乱码-深入FLASH编码转码机制>作了一点改进,可以在MX中使用,改动:

- 将类改成简单的function
- 运行前后不改变原来的 System.useCodepage 值

代码:

function ANSI2UTF(ANSI_string) {
 var temp = !(!System.useCodepage);
 System.useCodepage = true;
 var code = "";
 for (var i = 0; i<ANSI_string.length; i++) {
  code += "%"+ANSI_string.charCodeAt(i).toString(16);
 }
 var result = unescape(code);
 System.useCodepage = temp;
 return result;
}

使用示例:

my_sound = new Sound();
my_sound.onID3 = function() {
 var songName = ANSI2UTF(this.id3.songname);
 trace("result: "+songName);
};
my_sound.loadSound("music.mp3", false);

另外,在Flash帮助中有这样一段话:

在文档中请只设置一次 system.useCodepage 属性;不要为了使播放器将某些外部文件解释为 Unicode 并将另一些文件解释为其它编码,而多次使用该属性,原因是这样做会产生无法预料的结果。

看来这个函数可能会带来隐藏的问题,至于到底是什么问题,我目前还没有遇到。解决mp3ID3乱码问题还有其它办法,比如建立utf-8和GB2312/Big5编码的映像表等,但是都没有这个简单。

现存的问题:

- 只能转换本地编码到UTF-8,即:简体系统读取繁体中文ID3仍然会有乱码,同理繁体系统也是

- 只能转换ID3,对于更加广泛的txt等外部文本,转换方法仍然存在问

发表于 @ 2005年01月14日 17:20:00|评论(loading...)|编辑

旧一篇: 顯示或隱藏對象的成員

评论

#handsome 发表于2005-01-24 16:12:00  IP: 210.29.96.*
早上看到青蛙和云开写的那篇解决兼容问题的文章,然后我自己试了试,有1个能读,3个不能读,我就很奇怪,然后用mp3collocter看了看,那个能读的是v1都有的v2,其他只有v1的,
但trace只有id3v1标签的歌的时候,就会有问题,但是很奇怪,只是“部分”认不出来 我用id3.songname读出的是v2标签的,很奇怪,help上写的说这个是用来读v1的,大写才是读v2,还有大写好象没几个能正常读出数据的,老是读不出
还有一个就是,我觉得里面是不是出现如果v2和v1标签共存,优先读v2的?也就是说读v2有先级高(可能是因为v2在mp3头部的关系吧,读到了tag就不再读尾部的v1了)

我trace了一下16进值
186 BA
195 C3
200 C8
203 CB
210 D2
187 BB
201 C9
250 FA
BA C3 C8 CB D2 BB C9 FA

对应的GB2312就是[好人一生]


176
174
65533 -199
-233
178
187
65533 -196
-220
65533 -215
-247
177
573

B0 AE FFFD B2 BB FFFD FFFD B1 23D trace
B0 AE C7 E9 B2 BB C4 DC D7 F7 B1 C8 BD CF 应该是
对应的GG2312就是[爱FD不FDFD#D]但应该是爱情不能作比较

QQ:67238665
#qhwa 发表于2005-01-27 12:14:00  IP: 210.22.8.*
謝謝補充,繼續研究ing...
幫助中說:
如果文件中同时出现 ID3 1.0 和 ID3 2.0 标签,则此处理函数将被调用两次

可是怎麽trace都只有一次
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © qhwa