The life purpose of GNU Recode and librecode is to translate stuff from one character set to another.
This is particularly useful if you need to work with operating systems that don't do Latin 1 yet.
Recode knows ISO 8859 character sets, ASCII stuff many non-ASCII character sets (all flavors of EBCDIC I've heard of), Unicode, UTF stuff you've so dearly required, and other more interesting stunts (like on-the-fly Latin1-to-HTML entities.)
<zealot type=c64>Regrettably, as of writing, it doesn't do PETSCII. Otherwise, it's a great program...</zealot>
GNU Recode is particularly helpful when you want to include passages of text in non-Latin1 script to Everything2 or other web pages. For example, if I write stuff in Russian, I just save it to file (in ISO 8859-5 encoding, or KOI8R, or whatever), and say
$ recode -p ISO-8859-5..html4 < nyekulturny.txt > encoded.txt
...and then cut-and-paste encoded.txt to my writeup. The character set from which you code goes before the "..", and the target after it (you can get a list of the known encodings, as well as their aliases, by doing "recode -l"). "html4" uses Unicode character entities correctly.