static void AssignStr(cString &dest, const char *start, const char *end, _locale_t locale)
{
	dest.clear();
	if (end <= start)
    {
		return;
    }

	static const int NBUF = 64;
	wchar_t buf[NBUF];
	int nb = 0;

	size_t len = end - start;
	size_t initial = len + 1; // assume most characters are 1-byte
	dest.reserve(initial);

	const char *p = start;
	while (p < end)
	{
		int len = _mbtowc_l(&buf[nb++], p, end - p, locale);
		if (len < 1)
        {
			break;
        }

		p += len;
		if (p >= end || nb >= NBUF)
		{
			dest.append(buf, nb);
			nb = 0;
		}
	}
}
static void AssignStr(cString &dest, const char *start, const char *end, _locale_t locale)
{
	dest.clear();
	dest.reserve(end - start); // assume most characters are 1-byte

	const char *p = start;
	while (p < end)
	{
		wchar_t wc;
		int len = _mbtowc_l(&wc, p, end - p, locale);
		if (len < 1)
			break;

		dest.push_back(wc);
		p += len;
	}
}