Как именно файлы карт TMX закодированы в base_64? - PullRequest
3 голосов
/ 10 июля 2011

Я пишу игру для iOS, которая использует файлы карт .tmx.Я создаю карты в приложении 'Tiled', а затем в какой-то момент, прежде чем они попадают в iOS, я анализирую их с помощью Perl.

Когда я сохраняю файлы в виде простого XML, это очень удобно для Perlразобрать их.Однако cocos2d настаивает на том, чтобы файлы были закодированы в base64.У редактора карт «Tiled» нет проблем с сохранением файлов с этой схемой кодирования, и iOS читает их очень хорошо, но это создает проблемы для моего кода perl.

По какой-то причине стандартный MIME :: Base64 decode_base64 () метод в Perl не вырезает здесь горчицу - когда я декодирую строки, я получаю один или два двоичных символа - вопросительные знаки в прямоугольниках и тому подобное.

И расплывчатая документация по формату файлов TMX делает неясным, существует ли какая-либо другая кодировка до или после кодировки base64, которая может вызывать эти проблемы.Я посмотрел на исходный код cpp для кодировщика и увидел множество ссылок на Latin1, но я не смог расшифровать, что происходит в деталях.

Я заметил это, когда попытался выполнить свои собственные тесты с MIME:: Base64, кодирование, а затем декодирование тестовой строки, закодированный текст выглядит резко отличным от того, что я вижу из файлов TMX - например, мой закодированный в base64 текст для короткой строки выглядит так:

aGVyZSBpcyBhIHNlbnRlbmNl

Но текст в кодировке base64, поступающий из файлов TMX, выглядит следующим образом:

9QAAAAABAAANAQAAGAEAAA==

Любые предложения о том, что еще я мог бы попробовать при попытках декодировать строку, похожую на эту?

1 Ответ

3 голосов
/ 10 июля 2011

Я думаю эта страница может быть то, что вы ищете.Он предполагает, что сначала вы decode_base64 , затем (если присутствует атрибут compression="gzip") используйте gunzip , чтобы распаковать его, и, наконец, используйте unpack('V*', $data)список 4-байтовых целых чисел с прямым порядком байтов.

...