|
@@ -1435,30 +1435,51 @@ end:
|
|
{
|
|
{
|
|
if (wcs)
|
|
if (wcs)
|
|
{
|
|
{
|
|
|
|
+ // 格式化前设置语言区域;
|
|
|
|
+ TString old_locale;
|
|
|
|
+ TCHAR *pLocalName = _tsetlocale(LC_CTYPE, NULL);
|
|
|
|
+ if (pLocalName != NULL)
|
|
|
|
+ old_locale = pLocalName;
|
|
|
|
+ else
|
|
|
|
+ old_locale = _T("C");
|
|
|
|
+ _tsetlocale(LC_CTYPE, _T("chs"));//设定中文;
|
|
|
|
+
|
|
|
|
+#define LC_FREE _tsetlocale(LC_CTYPE, old_locale.c_str());
|
|
|
|
+
|
|
// 计算待转换的字节数
|
|
// 计算待转换的字节数
|
|
size_t count = wcstombs(NULL, wcs, 0);
|
|
size_t count = wcstombs(NULL, wcs, 0);
|
|
|
|
+ if (count == -1)
|
|
|
|
+ {// 转换失败,count=-1;
|
|
|
|
+ LC_FREE;
|
|
|
|
+ return std::string();
|
|
|
|
+ }
|
|
|
|
+
|
|
if (count <= K1) // 1k;
|
|
if (count <= K1) // 1k;
|
|
{
|
|
{
|
|
char szValue[K1] = { 0 };
|
|
char szValue[K1] = { 0 };
|
|
wcstombs(szValue, wcs, count);
|
|
wcstombs(szValue, wcs, count);
|
|
|
|
+ LC_FREE;
|
|
return std::string(szValue);
|
|
return std::string(szValue);
|
|
}
|
|
}
|
|
else if (count <= K2) // 2k;
|
|
else if (count <= K2) // 2k;
|
|
{
|
|
{
|
|
char szValue[K2] = { 0 };
|
|
char szValue[K2] = { 0 };
|
|
wcstombs(szValue, wcs, count);
|
|
wcstombs(szValue, wcs, count);
|
|
|
|
+ LC_FREE;
|
|
return std::string(szValue);
|
|
return std::string(szValue);
|
|
}
|
|
}
|
|
else if (count <= K4) // 4k;
|
|
else if (count <= K4) // 4k;
|
|
{
|
|
{
|
|
char szValue[K4] = { 0 };
|
|
char szValue[K4] = { 0 };
|
|
wcstombs(szValue, wcs, count);
|
|
wcstombs(szValue, wcs, count);
|
|
|
|
+ LC_FREE;
|
|
return std::string(szValue);
|
|
return std::string(szValue);
|
|
}
|
|
}
|
|
else if (count <= K8) // 8k;
|
|
else if (count <= K8) // 8k;
|
|
{
|
|
{
|
|
char szValue[K8] = { 0 };
|
|
char szValue[K8] = { 0 };
|
|
wcstombs(szValue, wcs, count);
|
|
wcstombs(szValue, wcs, count);
|
|
|
|
+ LC_FREE;
|
|
return std::string(szValue);
|
|
return std::string(szValue);
|
|
}
|
|
}
|
|
}
|
|
}
|