3

我正在为使用 .tmx 地图文件的 iOS 编写游戏。我在应用程序“平铺”中创建地图,然后在它们到达 iOS 之前的某个时间点,我用 Perl 解析它们。

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

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

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

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

aGVyZSBpcyBhIHNlbnRlbmNl

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

9QAAAAABAAANAQAAGAEAAA==

关于我可能尝试解码看起来像这样的字符串的任何其他建议?

4

1 回答 1

3

我认为这个页面可能是你正在寻找的。它建议您首先decode_base64,然后(如果compression="gzip"存在该属性)使用gunzip解压缩它,最后使用unpack('V*', $data)提取 4 字节 little-endian 整数列表。

于 2011-07-10T01:18:14.330 回答