Hast du schon mal daran gedacht, anstatt der Unicodestrings besser TBytes zu verwenden? Dann kann dir das Encoding nämlich völlig egal sein.
Ist ja quasi was ich geschrieben habe. Nur wirst du mit TBytes das selbe Problem haben wie mit PAnsiChar@UnicodeString, nämlich, dass du nicht richtig darauf zugreifen kannst, wenn du die Anpassung der Byte-Offsets nicht vornimmst. Es gibt sicher auch eine Funktion dafür, die mir allerdings zum jetzigen Zeitpunkt nicht bekannt ist.