Десериализовать двоичный NSMutableArray target-c в python - PullRequest
1 голос
/ 10 октября 2011

Я собираю веб-приложение Google App Engine на python и заполняю его базой данных из приложения для iPhone (sqlite).

У меня возникли некоторые сложности с 3 полями, которые определены как поля BLOB-объектов и содержат двоичные сериализованные объекты.(обычно они начинаются с "bplist", поэтому я предполагаю, что это двоичный сериализованный список свойств - те, которые меня интересуют, также содержат внутри себя сериализованный NSMutableArray.)

Я подозреваю, что мои 2 варианта выбора) Посмотрите, насколько удобен двоичный формат для регулярного вычленения значений из стиля (все они текстовые). Б) Напишите быстрое приложение для iOS, откройте базу данных, экспортируйте данные в лучший формат

Любые другие идеи,предложения о том, какой маршрут является наилучшим, или (скрестив пальцы) указатель на какое-то большое яйцо питона, которое решает все мои проблемы.

Ниже я включил образец и попытался разумно отформатировать его для среднего уровня.из нижней части, что мне нужно извлечь (анонимные фактические данные)

street = "1111 Address Ln #2004"
street2 = ""
City = "Dallas"
State = "Tx"
Zip = "75243"
Country = ""
Type = ""

Вот как выглядят данные для типичной записи: http://dl.dropbox.com/u/6649380/serializedobject.txt

"000000ACB  62 70 6C 69 73 74 30 30-D4 01 02 03 04 05 06 09   |bplist00Ô.|"
"000000ADB  0A 58 24 76 65 72 73 69-6F 6E 54 24 74 6F 70 59   |.X$versionT$topY|"
"000000AEB  24 61 72 63 68 69 76 65-72 58 24 6F 62 6A 65 63   |$archiverX$objec|"
"000000AFB  74 73 12 00 01 86 A0 D1-07 08 54 72 6F 6F 74 80   |ts † ÑTroot€|"
"000000B0B  01 5F 10 0F 4E 53 4B 65-79 65 64 41 72 63 68 69   |_NSKeyedArchi|"
"000000B1B  76 65 72 AF 10 12 0B 0C-12 25 26 27 27 28 29 2A   |ver¯%&''()*|"
"000000B2B  2B 2C 2D 2E 2F 30 34 3B-3E 55 24 6E 75 6C 6C D2   |+,-./04;>U$nullÒ|"
"000000B3B  0D 0E 0F 10 56 24 63 6C-61 73 73 5A 4E 53 2E 6F   |.V$classZNS.o|"
"000000B4B  62 6A 65 63 74 73 80 11-A1 11 80 02 D3 0D 13 0E   |bjects€¡€Ó.|"
"000000B5B  14 15 1D 57 4E 53 2E 6B-65 79 73 80 10 A7 16 17   |WNS.keysۤ|"
"000000B6B  18 19 1A 1B 1C 80 03 80-04 80 05 80 06 80 07 80   |€€€€€€|"
"000000B7B  08 80 09 A7 1E 1F 20 21-21 21 24 80 0A 80 0B 80   |€.§ !!!$€.€€|"
"000000B8B  0C 80 0D 80 0D 80 0D 80-0E 54 63 69 74 79 55 73   |€.€.€.€TcityUs|"
"000000B9B  74 61 74 65 53 7A 69 70-57 73 74 72 65 65 74 32   |tateSzipWstreet2|"
"000000BAB  54 74 79 70 65 57 63 6F-75 6E 74 72 79 57 73 74   |TtypeWcountryWst|"
"000000BBB  72 65 65 74 31 56 44 61-6C 6C 61 73 52 54 78 55   |reet1VDallasRTxU|"
"000000BCB  37 35 32 34 33 50 D2 0D-31 32 33 59 4E 53 2E 73   |75243PÒ.123YNS.s|"
"000000BDB  74 72 69 6E 67 80 0F 5F-10 14 31 31 31 31 20 41   |tring€_1111 A|"
"000000BEB  64 64 72 65 73 73 20 4C-6E 20 23 32 30 30 34 D2   |ddress Ln #2004Ò|"
"000000BFB  35 36 37 38 58 24 63 6C-61 73 73 65 73 5A 24 63   |5678X$classesZ$c|"
"000000C0B  6C 61 73 73 6E 61 6D 65-A3 38 39 3A 5F 10 0F 4E   |lassname£89:_N|"
"000000C1B  53 4D 75 74 61 62 6C 65-53 74 72 69 6E 67 58 4E   |SMutableStringXN|"
"000000C2B  53 53 74 72 69 6E 67 58-4E 53 4F 62 6A 65 63 74   |SStringXNSObject|"
"000000C3B  D2 35 36 3C 3D A2 3D 3A-5C 4E 53 44 69 63 74 69   |Ò56<=¢=:\NSDicti|"
"000000C4B  6F 6E 61 72 79 D2 35 36-3F 40 A3 40 41 3A 5E 4E   |onaryÒ56?@£@A:^N|"
"000000C5B  53 4D 75 74 61 62 6C 65-41 72 72 61 79 57 4E 53   |SMutableArrayWNS|"
"000000C6B  41 72 72 61 79 00 08 00-11 00 1A 00 1F 00 29 00   |Array     ) |"
"000000C7B  32 00 37 00 3A 00 3F 00-41 00 53 00 68 00 6E 00   |2 7 : ? A S h n |"
"000000C8B  73 00 7A 00 85 00 87 00-89 00 8B 00 92 00 9A 00   |s z … ‡ ‰ ‹ ’ š |"
"000000C9B  9C 00 A4 00 A6 00 A8 00-AA 00 AC 00 AE 00 B0 00   |œ ¤ ¦ ¨ ª ¬ ® ° |"
"000000CAB  B2 00 BA 00 BC 00 BE 00-C0 00 C2 00 C4 00 C6 00   |² º ¼ ¾ À Â Ä Æ |"
"000000CBB  C8 00 CD 00 D3 00 D7 00-DF 00 E4 00 EC 00 F4 00   |È Í Ó × ß ä ì ô |"
"000000CCB  FB 00 FE 01 04 01 05 01-0A 01 14 01 16 01 2D 01   |û þ.-|"
"000000CDB  32 01 3B 01 46 01 4A 01-5C 01 65 01 6E 01 73 01   |2;FJ\ens|"
"000000CEB  76 01 83 01 88 01 8C 01-9B 00 00 00 00 00 00 02   |vƒˆŒ›      |"
"000000CFB  01 00 00 00 00 00 00 00-42 00 00 00 00 00 00 00   |       B       |"
"000000D0B  00 00 00 00 00 00 00 01-A3                        |       £       |"

1 Ответ

1 голос
/ 10 октября 2011

Если вы планируете запустить этот скрипт на Mac, вы можете использовать команду plutil, чтобы преобразовать его в более легко разбираемый формат XML:

plutil -convert xml1 -o outfile infile

Чтобы вывод был выполнен на стандартный выводиспользуйте - в качестве выходного файла.Если вы пропустите опцию -o, вывод перезапишет входной файл.При желании вы можете использовать формат json вместо xml1 для получения вывода в формате JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...