On Sun, Jun 14, 2009 at 1:08 PM, Zachary Turner <divisortheory@gmail.com> wrote:
An application I currently work on is stricken with this.  If (like
us) you are just trying to provide basic internationalization across
Windows and Linux and want it to "just work" and be simple, then I
would suggest typedefing something like

typedef std::wstring utf_string;
typedef boost::filesystem::wpath utf_path;
typedef wchar_t utf_char;

etc on windows, and

typedef std::string utf_string;
typedef boost::filesystem::path utf_path;
typedef char utf_char;

on Linux.  Then just use a simple UTF-8 <-> UTF-16 conversion if ever
you need to persist / retrieve something, so that it's stored in a
common format.  We're getting many strange problems relating to
locales when we try to use UTF-16 in wpaths on Linux, and if it's not
too much effort it's going to be simpler to just have your program
always store them in the native format that the OS is expecting.

Great advice Zach. I'll definitely do this. However, it would be nice to have an already-made conversion routine for UTF8 to UTF16. I'm hoping that most of the cases where I'm converting encodings will be when I'm going through another library where it has already been handled, like wxWidgets or boost.