<html><body><div><span style="font-size: 13px;" data-mce-style="font-size: 13px;">On Sep 29, 2016, at 01:14 PM, Allan Odgaard <mailinglist@textmate.org> wrote:</span><br></div><div><br></div><div><blockquote type="cite"><div class="msg-quote"><div style="font-family: sans-serif;" data-mce-style="font-family: sans-serif;"><div style="white-space: normal;" data-mce-style="white-space: normal;"><p dir="auto"><span style="font-size: 13px;" data-mce-style="font-size: 13px;">On 29 Sep 2016, at 12:11, Per Persson wrote:</span></p><p dir="auto"><br></p></div><div style="white-space: pre-wrap;" data-mce-style="white-space: pre-wrap;"><blockquote style="border-left: 2px solid #777; color: #777; margin: 0 0 5px; padding-left: 5px;" data-mce-style="border-left: 2px solid #777; color: #777; margin: 0 0 5px; padding-left: 5px;"><div dir="auto"><span style="font-size: 13px;" data-mce-style="font-size: 13px;">It works mostly well, but trying to parse a command file that contains a command mapped to the escape key using plistlib/biplist fails with an exception:</span></div><div dir="auto"><span style="font-size: 13px;" data-mce-style="font-size: 13px;">[…]</span></div><div dir="auto"><span style="font-size: 13px;" data-mce-style="font-size: 13px;">Any clues how to handle this?</span></div></blockquote></div><div style="white-space: normal;" data-mce-style="white-space: normal;"><p dir="auto"><span style="font-size: 13px;" data-mce-style="font-size: 13px;">The issue is that XML does not allow ASCII control characters (and python checks this). XML 1.1 should allow them when entity-encoded, but both python 2.7.12 and 3.5.2 still throw an exception (for <code style="background-color: #f7f7f7; border-radius: 3px; margin: 0; padding: 0 0.4em;" data-mce-style="background-color: #f7f7f7; border-radius: 3px; margin: 0; padding: 0 0.4em;">&#x1B;</code>) in my test.</span></p><p dir="auto"><span style="font-size: 13px;" data-mce-style="font-size: 13px;">The biplist is using plistlib for XML property lists, so it may actually work for binary property lists.</span></p><p dir="auto"><span style="font-size: 13px;" data-mce-style="font-size: 13px;">So when encountering this exception, you could try convert the property list to its binary form (using <code style="background-color: #f7f7f7; border-radius: 3px; margin: 0; padding: 0 0.4em;" data-mce-style="background-color: #f7f7f7; border-radius: 3px; margin: 0; padding: 0 0.4em;">plutil</code>) and see if that works.</span></p><p dir="auto"><span style="font-size: 13px;" data-mce-style="font-size: 13px;">You could also look into using PyObjC and import <code style="background-color: #f7f7f7; border-radius: 3px; margin: 0; padding: 0 0.4em;" data-mce-style="background-color: #f7f7f7; border-radius: 3px; margin: 0; padding: 0 0.4em;">NSDictionary</code>, this should definitely read the file without problems.</span></p></div></div></div></blockquote></div><div><br data-mce-bogus="1"></div><div><span style="font-size: 13px;" data-mce-style="font-size: 13px;">Thanks Allan, </span></div><div><span style="font-size: 13px;" data-mce-style="font-size: 13px;"><span style="font-family: 'courier new', monospace;" data-mce-style="font-family: 'courier new', monospace;">plutil</span> did the trick. In fact it could actually convert the plist file to JSON with the escape properly escaped (pun intended;) </span></div><div><span style="font-size: 13px;" data-mce-style="font-size: 13px;">For the records, this is what I ended up with (no need for plistlib/biplist):</span></div><div><span style="font-size: 13px;" data-mce-style="font-size: 13px;"><br data-mce-bogus="1"></span></div><div><span style="font-family: 'courier new', monospace; font-size: 13px;" data-mce-style="font-family: 'courier new', monospace; font-size: 13px;"> def json_from_plist(path):<br>    p = Popen(['plutil', '-convert', 'json', path, '-o', '-'], stdout=PIPE, stderr=PIPE)<br>    res, err = p.communicate()<br>    return json.loads(res) if not err else {}<br></span></div><div><span style="font-family: 'courier new', monospace; font-size: 13px;" data-mce-style="font-family: 'courier new', monospace; font-size: 13px;"><br data-mce-bogus="1"></span></div><div><span style="font-size: 13px;" data-mce-style="font-size: 13px;" mce-data-marked="1">/Per</span></div><div><br data-mce-bogus="1"></div><div><span class="body-text-content" style="font-size: 13px;" data-mce-style="font-size: 13px;">_______________________________________________<br>textmate mailing list<br><a href="mailto:textmate@lists.macromates.com" data-mce-href="mailto:textmate@lists.macromates.com">textmate@lists.macromates.com</a><br><a href="http://lists.macromates.com/listinfo/textmate" data-mce-href="http://lists.macromates.com/listinfo/textmate">http://lists.macromates.com/listinfo/textmate</a></span></div><div><blockquote type="cite"><div class="msg-quote"></div></blockquote></div></body></html>