Кодировка форматированного текста в двоичном листе - PullRequest
0 голосов
/ 10 февраля 2011

Я пытаюсь создать сценарий, который редактирует бинарный файл plist.В plist описаны объекты, содержащиеся в профессиональном файле DVD Studio.Похоже, что текстовое поле в DVD Studio Pro закодировано в plist как данные base64, которые описывают текстовую строку вместе с ее форматированием.Я не могу понять, как понять эти данные.В идеале я хотел бы иметь возможность изменять текстовую строку, но не форматирование.Далее описывается текстовое поле с надписью «Название меню здесь».Есть две строки, одна с ключом под названием «словарь», а другая с именем «строка»;оба являются CFData.Любые идеи, как я могу разобрать это или преобразовать это в формат, который я могу редактировать напрямую?Я играл с небольшим конвертером в какао, но пока не повезло.

<dict>
                                            <key>Dictionary</key>
                                            <data>
                            BAtzdHJlYW10
                            eXBlZIHoA4QB
                            QISEhAxOU0Rp
                            Y3Rpb25hcnkA
                            hIQITlNPYmpl
                            Y3QAhYQBaQaS
                            hISECE5TU3Ry
                            aW5nAZSEASsG
                            TlNGb250hpKE
                            hIQGTlNGb250
                            HpSVJIQFWzM2
                            Y10GAAAAGgAA
                            AP/+TAB1AGMA
                            aQBkAGEARwBy
                            AGEAbgBkAGUA
                            AACEAWYVhAFj
                            AJsBmwCbAIaS
                            hJaXB05TQ29s
                            b3KGkoSEhAdO
                            U0NvbG9yAJSb
                            AYQEZmZmZoPz
                            8nI/g/Dvbz+D
                            7OtrPwGGkoSW
                            lwtOU0V4cGFu
                            c2lvboaShISE
                            CE5TTnVtYmVy
                            AISEB05TVmFs
                            dWUAlIQBKoSa
                            moNHx9c9hpKE
                            lpcNTlNPYmxp
                            cXVlbmVzc4aS
                            hJ6ghIQBZKEA
                            hpKElpcQTlNQ
                            YXJhZ3JhcGhT
                            dHlsZYaShISE
                            EE5TUGFyYWdy
                            YXBoU3R5bGUA
                            lIQEQ0NAUwAA
                            hQCGkoSWlxFO
                            U0JhY2tncm91
                            bmRDb2xvcoaS
                            hJubA4QCZmYA
                            AIaG
                                            </data>
                                            <key>String</key>
                                            <data>
                            BAtzdHJlYW10
                            eXBlZIHoA4QB
                            QISEhBJOU0F0
                            dHJpYnV0ZWRT
                            dHJpbmcAhIQI
                            TlNPYmplY3QA
                            hZKEhIQITlNT
                            dHJpbmcBlIQB
                            Kw9OZW51IFRp
                            dGxlIEhlcmWG
                            hAJpSQEPkoSE
                            hAxOU0RpY3Rp
                            b25hcnkAlIQB
                            aQWShJaWDU5T
                            T2JsaXF1ZW5l
                            c3OGkoSEhAhO
                            U051bWJlcgCE
                            hAdOU1ZhbHVl
                            AJSEASqEhAFk
                            nQCGkoSWlgtO
                            U0V4cGFuc2lv
                            boaShJuchIQB
                            Zp6DR8fXPYaS
                            hJaWEE5TUGFy
                            YWdyYXBoU3R5
                            bGWGkoSEhBBO
                            U1BhcmFncmFw
                            aFN0eWxlAJSE
                            BENDQFMAAIUA
                            hpKElpYGTlNG
                            b250hpKEhIQG
                            TlNGb250HpSZ
                            JIQFWzM2Y10G
                            AAAAGgAAAP/+
                            TAB1AGMAaQBk
                            AGEARwByAGEA
                            bgBkAGUAAACe
                            FYQBYwCjAaMA
                            owCGkoSWlgdO
                            U0NvbG9yhpKE
                            hIQHTlNDb2xv
                            cgCUowGEBGZm
                            ZmaD8/JyP4Pw
                            728/g+zraz8B
                            hoaG
                                            </data>
                                        </dict>

1 Ответ

2 голосов
/ 17 февраля 2011

Это архив NSArchiver с кодировкой base64.Вам нужно сначала декодировать base64, затем использовать [NSUnarchiver unarchiveObjectWithData:].Приведенная выше запись «Словарь» выглядит так после декодирования (в синтаксисе Python, потому что я использовал pyObjC):

{
    NSBackgroundColor = "NSCalibratedWhiteColorSpace 0 0";
    NSColor = "NSCalibratedRGBColorSpace 0.94902 0.937255 0.921569 1";
    NSExpansion = "0.1053606";
    NSFont = "\"LucidaGrande 21.00 pt. P [] (0x103110b60) fobj=0x103110c30, spc=6.64\"";
    NSObliqueness = 0;
    NSParagraphStyle = "Alignment 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n), DefaultTabInterval 0, Blocks (null), Lists (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0.05, HeaderLevel 0";
}
...