Ixrec, what was your solution to the string problem?
Because I started on Windows and ported to Linux, and have yet to refactor this part of my code, and I thought this approach was a good excuse to learn how UTF-8 worked (which it was), I have a very suboptimal solution:
//this function was written by http://www.cplusplus.com/user/Disch/
//taken from his post http://www.cplusplus.com/forum/general/31270/#msg169285
std::wstring utf8_to_wstring(const char* str);
//this function I made myself based on Disch's function above
std::string wstring_to_utf8(std::wstring line);
...
//tex_file is a std::wstring
#ifdef _WINDOWS
std::ifstream ifs(tex_file, std::ifstream::binary);
#else
std::ifstream ifs(wstring_to_utf8(tex_file).c_str(), std::ifstream::binary);
#endif
...
When I finally get around to refactoring this, I want to try something like:
#ifdef _WINDOWS
#define STR std::wstring
#else
#define STR std::string
#endif
I'm hoping this will be a nice easy way to remove all the rather unnecessary conversions I'm doing at the moment.
At the time I wrote that I think I was also unaware of sf::String/sf::Utf, so that might help too, but I want to use proper C++11 when I do my refactoring so I'll rely on that for my unicode solutions. That, and using sf::String/sf::Utf will just hide/automate the conversions; I'd prefer my program simply use the right string type on each platform with a minimum of converting.
Back to the big picture: if you want to use boost, then that should make problems like this a lot simpler. Offhand I have no idea how good their support for cross-platform non-ASCII filenames is but I'd be shocked if it wasn't there at all. Personally, I want to avoid massive libraries like boost as long as my non-SFML needs are very narrow in scope, hence I'll be trying a STR macro or C++11 stuff or something.
You should be able to do just SFML for a long time until you run into annoying little problems like this, so I doubt you'll need to learn boost at the same time as SFML. And SFML is almost certainly the easier one to pick up.