Hi Jules,
I think I stumbled on a little bug in String::createStringFromData.
This condition:
else if ((data[0] == (uint8) CharPointer_UTF16::byteOrderMarkBE1
&& data[1] == (uint8) CharPointer_UTF16::byteOrderMarkBE2)
|| (data[0] == (uint8) CharPointer_UTF16::byteOrderMarkLE1
&& data[1] == (uint8) CharPointer_UTF16::byteOrderMarkLE1))
should have ::byteOrderMarkLE2 in the last line instead of byteOrderMarkLE1