当前位置: 代码迷 >> Web前端 >> DataArray之恼人的ID3乱码
  详细解决方案

DataArray之恼人的ID3乱码

热度:105   发布时间:2012-10-25 10:58:58.0
DataArray之烦人的ID3乱码

?在最近的研究过程中发现一个问题,as3中加载了mp3后所输出的ID3信息始终为乱码.通过dataArray可以做到ID3信息的编码转换.先来看一下原理.
import flash.utils.ByteArray
在管方文档中说明得很清楚,The ByteArray class provides methods and properties to optimize reading, writing, and working with binary data. ByteArray 是用以处理二进制格式数据的. 有趣的是,ByteArray可以使用标准数组访问.如myByteArray[i],将会返回该字节的十进制值.
再看第二步,UTF-8的二进制结构.如下为一个示例的UTF-8编码表:
UTF-8?
ASCIIHEX?
BIN?
DEC?
DEC?C2 A0?
1100-0010 1010-0000
194 160?
160?C3 80
1100-0011 1000-0000
195 128
192?C3 81?
1100-0011 1000-0001
195 129
193从该表中可以看到,
所有双字节都以194,195作为头字节.而以195为头字节的双字节所取的ASCII 值为后字节值加64.
以C3 81为例,头字节最左侧的11表示这是一个双字节值,尾字节的最左侧10同样 表示这是一个双字节值且为尾字节.
从结构上来看,C3 81在GB2312或Latin-1等编码中.以单子节表现为
11
000001
,在utf-8中则为 110000
11
?10
000001
.关于编码格 式的问题,就点道为止吧.
结合以上的原理,我写了下面这个方法来实现ID3信息的编码转换:
/*
??*id3信息编码转换
??*/
??private function EncodeUtf8(str : String):String {
???var oriByteArr : ByteArray = new ByteArray();
???oriByteArr.writeUTFBytes (str);
???var tempByteArr : ByteArray = new ByteArray();
???trace(str);
???for (var i = 0; i
?
?
?
?
?主要的方法是readMultiByte,结合帮助上面的代码很容易理解,就不多说废话了。附上一个实例的
源文件
.另外, 对mp3中各中编码格式的信息测试还不完全,有问题欢迎各位补全.
本文参考了以下文章,对我的帮助比较大:
http://www.aiview.com/2006/03/translate_latin-1_in_utf- 8_back_to_ascii.html
(作者提供了两个DB2中转义的方法,第二个与我的方法很象)
http://25swf.blogbus.com/logs/12867189.ht ml
(比我先想到,不过方法思路有点小问题)
http://blog.benstucki.net/?p=3
(该页内容为结合URLStream读取ID3的方法,关键方法相同)
本文转自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/2007.html
  相关解决方案