MATLAB: UTF-8 strings in MEX-files

mexmex filesuft-8unicode

This question has been asked here before, but not with any satisfying answers. Since all those answers, a new documented function mxArrayToUTF8String has appeared. I'm hoping to find the function that does the reverse: make an mxArray from a UTF-8 encoded C or C++ string. I'm OK with an undocumented function, or using a bit of code from someone else. I'm not OK with linking some huge Unicode library, which I have no use for. All I need is convert UTF-8 to UTF-16 (which seems to be what MATLAB uses in their mxChar arrays).
Does anybody have any experience with UTF-8 encoded strings in MATLAB?
What does The MathWorks suggest we do if we want to work with UTF-8 encoded strings?

Best Answer

A solution when using C++11:
I found this answer on StackOverflow: http://stackoverflow.com/a/38383389 It turns out C++11 has built-in functions for converting between various Unicode encodings.
#include "mex.h"
#include <algorithm>
#include <string>
#include <locale>
#include <codecvt>
...
std::string u8str = u8"µm²";
std::u16string u16str = std::wstring_convert< std::codecvt_utf8_utf16< char16_t >, char16_t >{}.from_bytes( u8str );
mwSize sz[ 2 ] = { 1, u16str.size() + 1 }; // +1 to include terminating null character
mxArray* mxstr = mxCreateCharArray( 2, sz );
std::copy( u16str.begin(), u16str.end() + 1, mxGetChars( mxstr )); // again +1 for terminating null character