在String是8bit的时候,调用insert等函数的时候,内部会调用StringImpl::copyChars<UCHAR>版本,把8bit转成uchar,但这个转换是直接:
ALWAYS_INLINE static void copyChars(UChar* destination, const LChar* source, unsigned numCharacters) { for (unsigned i = 0; i < numCharacters; ++i) destination[i] = source[i]; }
这样转!如果是utf8编码,这样转成uchar显然是不正确的。所以会导致调用insert后,utf8编码就不对了。其实这算是String的故意的,因为String如果是8bit,则应该是latin1编码。