For bidirectional reordering of strings, we recommend the GNU FriBidi library: http://www.fribidi.org/.
For the rendering of Unicode strings outside of the context of a given toolkit (KDE/Qt or GNOME/Gtk), we recommend the Pango library: http://www.pango.org/.