Example #1
0
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();
}