2011-07-10 25 views
3

我正在爲使用.tmx地圖文件的iOS編寫遊戲。我在應用程序'Tiled'中創建地圖,然後在他們到達iOS之前的某個時刻,我使用Perl解析它們。TMX地圖文件base_64編碼的精確程度如何?

當我將這些文件保存爲直接的XML文件時,對於perl來解析它們是一件小事。但是,cocos2d堅持這些文件是base64編碼的。 'Tiled'地圖編輯器在使用這種編碼方案保存文件時沒有問題,iOS可以很好地讀取它們,但是它會給我的Perl代碼帶來問題。

出於某種原因,perl中的標準MIME :: Base64 decode_base64()方法在這裏不會切割芥末 - 當我解碼字符串時,我會得到一個或兩個二進制字符 - 菱形框等中的問號。

而TMX文件格式的模糊文檔使得它不清楚在base64編碼之前或之後是否有其他編碼可能導致此問題。我查看了編碼器的cpp源代碼,並且我看到了很多對Latin1的引用,但我無法詳細解釋發生了什麼。

我注意到,當我嘗試使用MIME :: Base64進行自己的測試時,編碼並解碼測試字符串時,編碼的文本看起來與我看到的TMX文件顯着不同 - 例如,對於一個簡短的字符串我base64編碼的文字是這樣的:

aGVyZSBpcyBhIHNlbnRlbmNl 

但是從TMX文件來的base64編碼的文字是這樣的:

9QAAAAABAAANAQAAGAEAAA== 

上還有什麼我可以嘗試任何建議試圖解碼看起來像那樣的字符串?

回答

3

我認爲this page可能是你要找的。它建議首先你decode_base64,然後(如果compression="gzip"屬性存在)使用gunzip來解壓縮它,最後使用unpack('V*', $data)來提取4字節小端序整數列表。

+0

謝謝,這非常有幫助。然而,在base64之後,似乎我仍然錯過了一些東西 - 根據它們的指令解碼(未壓縮的)數據:「從數據流的開始到結束,您可以一次讀取每個GID 4個字節。」 - 但我看到的只是一個破損的小特殊字符,我的文本編輯器甚至無法正確顯示 - 這讓我覺得還有一些我沒有得到的關於將base64解碼數據後處理成一系列數字的問題。 – todd412

+0

我不是一個perl的人,所以我不能告訴你到底該做什麼,但是在base-64解碼之後,你應該有一個可以被4整除的長度的數組或流。你需要讀取這個流4個字節一次創建32位整數(4字節* 8位/字節= 32)。當讀取字節爲@cjm指出時,理解endian-ness非常重要。 –

+0

感謝你們兩位,我認爲剩下的問題只是我需要了解base64編碼細節的東西。 – todd412

相關問題