Očekává se UTF-8

Správně internacializovaná aplikace nebude mít žádné předpoklady ohledně počtu bajtů na znak. To znamená, že byste neměli používat ukazatelovou aritmetiku k procházení řetězců po znacích a neměli byste používat std::string nebo standardní funkce C, jako je strlen(), protože ty takové předpoklady mají.

Místo obyčejných polí char* a ukazatelové aritmetiky už stejně nejspíše používáte třídu std::string, takže stačí, když přejdete místo ní na používání Glib::ustring. Viz kapitola Základy o Glib::ustring.

25.3.1. Glib::ustring and std::iostreams

Unfortunately, the integration with the standard iostreams is not completely foolproof. gtkmm converts Glib::ustrings to a locale-specific encoding (which usually is not UTF-8) if you output them to an ostream with operator<<. Likewise, retrieving Glib::ustrings from istream with operator>> causes a conversion in the opposite direction. But this scheme breaks down if you go through a std::string, e.g. by inputting text from a stream to a std::string and then implicitly converting it to a Glib::ustring. If the string contained non-ASCII characters and the current locale is not UTF-8 encoded, the result is a corrupted Glib::ustring. You can work around this with a manual conversion. For instance, to retrieve the std::string from a ostringstream:

std::locale::global(std::locale("")); // Set the global locale to the user's preferred locale.
                                      // Usually unnecessary here, because Glib::init()
                                      // or Gtk::Application::create() does it for you.
std::ostringstream output;
output << percentage << " % done";
label->set_text(Glib::locale_to_utf8(output.str()));