我正在使用tiled來創建平鋪貼圖。 (Tiled是一個支持正交和等距地圖的瓷磚地圖編輯器)使用javascript解碼平鋪的base64數據時出錯解決方案
它將地圖保存在XML文件中。它可以使用特定的編碼結構:
- 正規的base64
- 的base64 + gzip的
- 的base64 + zlib的
- 定期CSV
現在,我已經完全對的gzip放棄了(我的服務器gzips流量它反正,所以沒有損失那裏) 所以我想我會嘗試經常base64解碼,使用a base64 jquery plugin
但數據出來全是亂碼,就像這樣:
��������������������������������������������������������
我想這是二進制編碼,但我怎麼周圍的得到什麼?
需要實施例的數據被解碼(定期的base64):
jQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAKEAAACiAAAAowAAAKQAAAClAAAApgAAAKcAAAA=
實施例的數據需要被解碼(gzip壓縮的base64):
H4sIAAAAAAAACw3DhwnAMAwAMP8P2Rdk9s1KoBQR2WK12R1Ol9vj9fn5A/luZ4Y4AAAA
實施例的數據作爲CSV:
141,142,143,144,145,146,147,
161,162,163,164,165,166,167
那麼我怎樣才能打開常規的base64編碼位並將其變成csv?
編輯:
利用該解決方案尖尖發現我有一個半正確的陣列。 然而,在數千個字符後,這兩個數字會再次出錯。之後更頻繁。
然後我發現有人在他的方案中也使用平鋪和base64編碼。 他解碼陣列後,他也這樣做吧:
var d = base64_decode($(this).find('data').text());
var e = new Array();
for (var i = 0; i <= d.length; i += 4) {
var f = d[i] | d[i + 1] << 8 | d[i + 2] << 16 | d[i + 3] << 24;
e.push(f)
}
我不知道爲什麼這是需要的,但至少它的工作原理。 如果有人能解釋,請做!
工作。 雖然數組中只有每四個數字都是正確的。我可以遍歷這個,沒問題。 但是,在一定數量的數字後,他們又錯了。 Like:41,42,43,44,44,41,44,41,4096,12288 應該是:41,42,43,44,44,41,44,41,225,226,227 這是怎麼發生的? – skerit 2010-07-14 17:21:55
嗯,它可能是base-64數據正在解碼,但隨後字符串值的Unicode性質正在得到你的方式。既然你真的想把這些字節當作原始數字值,那麼使用自定義的解碼器可能會更好。我正在玩一個Javascript base-64解碼器,就在幾天前。我會尋找它。 – Pointy 2010-07-14 17:44:55
好的,謝謝! 因此,澄清:第522個數字是正確的。 – skerit 2010-07-14 18:05:37