… and used stringByAddingPercentEscapesUsingEncoding from Cocoa.
On the Cocoa side of things, it's as easy as:
unescape on the argument. Don't or you won't get any of the Unicode goodness in your string (and we all know that healthy strings needs lots and lots of Unicode!) Instead use
decodeURIComponent like this:
Hope this helps someone else out there :)