TMX映射文件究竟是如何base64编码的?

时间:2011-07-10 00:43:31

标签: iphone perl cocos2d-iphone tmx

我正在为iOS编写一个使用.tmx地图文件的游戏。我正在应用程序'Tiled'中创建地图,然后在他们到达iOS之前的某个时刻,我正在用Perl解析它们。

当我将文件保存为直接XML时,perl可以解析它们。但是,cocos2d坚持认为文件是base64编码的。 “Tiled”地图编辑器使用这种编码方案保存文件没有问题,iOS读取它们就好了,但它给我的perl代码带来了问题。

出于某种原因,perl中的标准MIME :: Base64 decode_base64()方法并没有在这里切割芥末 - 当我解码字符串时,我得到一个或两个二进制字符 - 菱形框中的问号等。

TMX文件格式的模糊文档使得不清楚在base64编码之前或之后是否存在其他编码,这可能导致此问题。我查看了编码器的cpp源代码,我看到很多对Latin1的引用,但我无法解释详细情况。

我注意到当我尝试使用MIME :: Base64进行自己的测试,编码然后解码测试字符串时,编码后的文本看起来与我从TMX文件中看到的文本截然不同 - 例如,我的短字符串的base64编码文本如下所示:

aGVyZSBpcyBhIHNlbnRlbmNl

但来自TMX文件的base64编码文本如下所示:

9QAAAAABAAANAQAAGAEAAA==

有什么建议可以尝试解码看起来像这样的字符串?

1 个答案:

答案 0 :(得分:3)

我认为this page可能就是你要找的东西。它建议首先decode_base64,然后(如果compression="gzip"属性存在)使用gunzip解压缩它,最后使用unpack('V*', $data)提取4字节列表小端整数。