在最近的研究過程中發現乙個問題,as3中載入了***後所輸出的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=原始檔[/url]
.另外, 對***中各中編碼格式的資訊測試還不完全,有問題歡迎各位補全.
[url= 8_back_to_ascii.html[/url]
(作者提供了兩個db2中轉義的方法,第二個與我的方法很象)
[url= ml[/url]
(比我先想到,不過方法思路有點小問題)
[url=
(該頁內容為結合urlstream讀取id3的方法,關鍵方法相同)
煩人的型別轉換
一 對有關資料型別轉換的整理 int i 100 long l 2001 float f 300.2 double d 12345.119 char username 程佩君 char temp 200 char buf cstring str variant t v1 bstr t v2 一 其它...
DayTwentyThree 煩人的筆試
初始資料集的排列順序對演算法的效能無影響的演算法有 選 直接選擇排序 歸 歸併排序 堆 堆排序 影響排序演算法時間複雜度的主要原因是比較的次數 基於比較的排序演算法有 直接插入排序 氣泡排序 簡單選擇排序 希爾排序 快速排序 堆排序歸併排序 基數排序 桶排序都屬於分配式排序,且都是穩定排序演算法比較...
DayTwentyFour 煩人的筆試
resize 方法可以為陣列提前分配大小,但不分配記憶體。當乙個數在一堆數 現的次數大於整體個數的一半時 可以用以下 找出這個數 int morethanhalfnum solution vector int nums return val 構建大根堆和小根堆的 priority queue int...