X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FBasics%2FBasics_Utils.cxx;h=2f0338f97274c59e673621d32a6b70a1beb1bbc8;hb=d1070d09cfbba6d9b72d8f2ca8d07d23f296686c;hp=1896cd796c60e1684d7d6ef3d90a8ae2ae6b4018;hpb=47a3ab12ae8942eff86503140937c79e31550c2b;p=modules%2Fkernel.git diff --git a/src/Basics/Basics_Utils.cxx b/src/Basics/Basics_Utils.cxx index 1896cd796..2f0338f97 100644 --- a/src/Basics/Basics_Utils.cxx +++ b/src/Basics/Basics_Utils.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -32,6 +32,8 @@ #include #endif +#include +#include namespace Kernel_Utils { @@ -83,13 +85,24 @@ namespace Kernel_Utils Localizer::Localizer() { - myCurLocale = setlocale(LC_NUMERIC, 0); - setlocale(LC_NUMERIC, "C"); + init(LC_NUMERIC, "C"); + } + + Localizer::Localizer(int category, const char* locale) + { + init(category, locale); + } + + void Localizer::init(int category, const char* locale) + { + myCategory = category; + myOriginalLocale = setlocale(category, NULL); + setlocale(category, locale); } Localizer::~Localizer() { - setlocale(LC_NUMERIC, myCurLocale.c_str()); + setlocale(myCategory, myOriginalLocale.c_str()); } std::string GetGUID( GUIDtype type ) @@ -108,7 +121,7 @@ namespace Kernel_Utils const wchar_t* decode(const char* encoded) { - //setlocale(LC_ALL, ""); + Localizer loc(LC_CTYPE, ""); size_t length = strlen(encoded) + sizeof(char); wchar_t* decoded = new wchar_t[length]; memset( decoded, '\0', length); @@ -123,7 +136,7 @@ namespace Kernel_Utils const char* encode(const wchar_t* decoded) { - //setlocale(LC_ALL, ""); + Localizer loc(LC_CTYPE, ""); size_t length = std::wcslen(decoded) + sizeof(wchar_t); char* encoded = new char[length]; memset( encoded, '\0', length); @@ -133,7 +146,8 @@ namespace Kernel_Utils std::string encode_s(const wchar_t* decoded) { - return std::string(encode(decoded)); + std::unique_ptr> tmp((char *)encode(decoded),[](char *ptr) { delete [] ptr; }); + return std::string(tmp.get()); } #ifndef WIN32 @@ -161,7 +175,7 @@ namespace Kernel_Utils { std::stringstream sstr; sstr<