In case anyone else finds this useful…
In .proj export files, resources are linked to folders by UUID - but the folder UUID is encoded differently, which makes it hard to match them up:
<resource id='20439' name='Folder A' module='fpmi' modver='' type='__folder' ver='0' dirty='false' editcount='0' parent='' oemlocked='false' scope='4' protected='false'>
<doc></doc>
<bytes><![CDATA[gfVM03u8cpUxQaQOH3JN0Q==]]></bytes>
</resource>
<resource id='20414' name='Folder B' module='fpmi' modver='' type='__folder' ver='0' dirty='false' editcount='0' parent='d14d721f-0ea4-4131-9572-bc7bd34cf581' oemlocked='false' scope='4' protected='false'>
<doc></doc>
<bytes><![CDATA[UPki+Fgp2qSCSLoUCA8ktw==]]></bytes>
</resource>
Strangely, the base64 encoded version is also reversed from the UUID string.
You can convert between the UUID string and the base64 representation with the following:
#!/usr/bin/env python
import uuid
from base64 import b64encode, b64decode
def encode(text):
return b64encode(uuid.UUID(text).bytes[::-1])
def decode(text):
return uuid.UUID(bytes=b64decode(text)[::-1])
if __name__ == '__main__':
import sys
for arg in sys.argv[1:]:
if len(arg) == 24:
print decode(arg)
elif len(arg) == 36:
print encode(arg)
else:
sys.stderr.write('Invalid length\n')
sys.exit(1)
Example usage:
$ ./uuid_convert.py d14d721f-0ea4-4131-9572-bc7bd34cf581
gfVM03u8cpUxQaQOH3JN0Q==
$ ./uuid_convert.py gfVM03u8cpUxQaQOH3JN0Q==
d14d721f-0ea4-4131-9572-bc7bd34cf581