String CacheFileFromUrl(const String &url) {
	Md5Hash hash;
	ByteBuffer *utf8url = StringUtil::StringToUtf8N(url);
	hash.Initialize();
	hash.Update(*utf8url);
	ByteBuffer *hashBuffer = hash.FinalizeN();

	String hashString(VKUApp::GetInstance()->GetCacheDir());
	byte currentByte;
	while(hashBuffer->GetRemaining() > 0) {
		hashBuffer->GetByte(currentByte);
		hashString.Append(hexTable[currentByte]);
	}
	hashString.Append(".jpg");

	delete utf8url;
	delete hashBuffer;

	return hashString;
}
static KDbool convString2Utf8 ( KDchar* pszDst, KDsize uMaxLen, String strSrc )
{
	ByteBuffer*  pBuff = KD_NULL;
	KDsize       uCnt  = 0;

	pBuff = StringUtil::StringToUtf8N ( strSrc );
	if ( !pBuff )
	{
		goto end;
	}

	while ( pBuff->HasRemaining ( ) )
	{
		byte   b;
		pBuff->GetByte ( b );

		if ( uCnt < ( uMaxLen - 1 ) )
		{
			pszDst [ uCnt++ ] = b;
		}
		else
		{
			break;
		}
	}

	pszDst [ uCnt ] = '\0';

end :

	if ( pBuff )
	{
		delete pBuff;
	}


	return KD_TRUE;
}