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等编码中.以单子节表现为
[color="#ff0000"]11[/color]
[color="#339966"]000001[/color]
,在utf-8中则为 110000
[color="#ff0000"]11 [/color]
 10
[color="#339966"]000001[/color]
.关于编码格 式的问题,就点道为止吧.
结合以上的原理,我写了下面这个方法来实现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,结合帮助上面的代码很容易理解,就不多说废话了。附上一个实例的
[url=http://www.2solo.cn/upload/ID3Encode_2soloDOTcn.zip]源文件[/url]
.另外, 对mp3中各中编码格式的信息测试还不完全,有问题欢迎各位补全.
本文参考了以下文章,对我的帮助比较大:
[url=http://www.aiview.com/2006/03/translate_latin-1_in_utf-8_back_to_ascii.html]http://www.aiview.com/2006/03/translate_latin-1_in_utf- 8_back_to_ascii.html[/url]
(作者提供了两个DB2中转义的方法,第二个与我的方法很象)
[url=http://25swf.blogbus.com/logs/12867189.html]http://25swf.blogbus.com/logs/12867189.ht ml[/url]
(比我先想到,不过方法思路有点小问题)
[url=http://blog.benstucki.net/?p=3]http://blog.benstucki.net/?p=3[/url]
(该页内容为结合URLStream读取ID3的方法,关键方法相同)
本文转自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/2007.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在科学计算领域,特别是在使用Python的数据分析和科学计算库xarray时,DataArray是一种常见的数据结构类型。 DataArray是xarray库的核心数据结构之一,它是一个带有标签的多维数组。它类似于NumPy的ndarray,但提供了更强大的功能,如坐标和维度标签、元数据等。 DataArray由数据和与之相关的坐标组成。数据可以是一维、二维或多维的,并且可以具有不同的数据类型。坐标用于标识数据的位置,可以是数字、日期、时间等类型。 使用DataArray,你可以执行各种操作,如索引、切片、聚合、计算等。它还提供了一些方便的功能,如数据对齐、标签索引、标签切片等,使得处理多维数据更加灵活和方便。 下面是一个使用xarray创建和操作DataArray的简单示例: ```python import xarray as xr import numpy as np # 创建一个DataArray对象 data = np.random.rand(3, 4) coords = {'time': [1, 2, 3], 'space': ['A', 'B', 'C', 'D']} da = xr.DataArray(data, coords=coords, dims=['time', 'space']) # 访问数据和坐标 print(da) print(da.data) print(da.coords['time']) # 执行操作 print(da.mean(dim='time')) print(da.sel(time=2)) ``` 以上示例中,我们首先创建了一个3x4的随机数据数组,并定义了time和space两个坐标。然后,我们使用这些数据和坐标创建了一个DataArray对象。最后,我们展示了如何访问数据和坐标,以及执行一些操作如计算均值和按标签选择数据。 希望这个简单的示例能够帮助你更好地理解DataArray类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值