AnsiString WStoUTF8(const std::wstring& s){ AnsiString Value; if (s.size()==0) { return Value; } int32 len = 3 * s.size() + 1; Value.resize(len); UTF8* DestStart = (UTF8*)(&Value[0]); UTF8* DestEnd = DestStart + len; #ifdef WIN32 const UTF16* Start = (const UTF16*)s.c_str(); const UTF16* End = Start + s.size(); ConversionResult ret = ConvertUTF16toUTF8(&Start,End,&DestStart,DestEnd, strictConversion); #else const UTF32* Start = (const UTF32*)s.c_str(); const UTF32* End = Start + s.size(); ConversionResult ret = ConvertUTF32toUTF8(&Start,End,&DestStart,DestEnd, strictConversion); #endif if (ret != conversionOK) { //throw std::exception("UFT8 Convert Fail.");这种工具函数扔出例外似乎只会对宿主程序构成骚扰 //改为给出提示+可能的乱码 Value = "UFT16TO8 Convert Fail:"; return Value += (const char*)s.c_str(); } return Value.c_str(); }