Well, we had "Unicode" for a while in Mapnik - first it was ad-hoc utf8 and latin1 to UCS-2/4 transcoders, then iconv and fribidi. It kind of worked (sometimes) but it wasn't a proper solution. There were a few problems with the previous approaches - std::wstring is not portable, fribidi was choking in multi-threaded rendering and had to be disabled.
Result? It was constantly brought to my attention by Morocco in OSM and others.Arabic is a "right-to-left" language for starters and it also requires "shaping" (this is when characters change depending on where they are in the text to form smooth connections between letters).
So here is the solution - ICU. I hope it will be final :).