@@ -9,14 +9,12 @@ namespace Utility::Str {
99 std::string toUTF8 (const std::u16string& str) {
1010 if (str.empty ()) return " " ;
1111
12- std::string ret;
13- ret.resize (str.size ());
12+ std::string ret (str.size (), ' \0 ' );
1413 char * pszNext;
1514 const char16_t * pwszNext;
1615 std::mbstate_t state = {0 }; // zero-initialization represents the initial conversion state for mbstate_t
17- std::locale loc (" C" );
18- int res = std::use_facet<std::codecvt<char16_t , char , mbstate_t >>(loc).out (state, str.c_str (), &str[str.size ()], pwszNext,
19- &ret[0 ], &ret[ret.size ()], pszNext);
16+ const std::codecvt_base::result& res = std::use_facet<std::codecvt<char16_t , char , mbstate_t >>(std::locale::classic ()).out (
17+ state, str.data (), str.data () + str.size (), pwszNext, ret.data (), ret.data () + ret.size (), pszNext);
2018
2119 if (res == std::codecvt_base::error) return " " ;
2220 return ret;
@@ -26,20 +24,18 @@ namespace Utility::Str {
2624 {
2725 if (str.empty ()) return u" " ;
2826
29- std::u16string ret;
30- ret.resize (str.size ());
27+ std::u16string ret (str.size (), u' \0 ' );
3128 const char * pszNext;
3229 char16_t * pwszNext;
3330 std::mbstate_t state = {0 }; // zero-initialization represents the initial conversion state for mbstate_t
34- std::locale loc (" C" );
35- int res = std::use_facet<std::codecvt<char16_t , char , mbstate_t >>(loc).in (state, str.c_str (), &str[str.size ()], pszNext,
36- &ret[0 ], &ret[ret.size ()], pwszNext);
31+ const std::codecvt_base::result& res = std::use_facet<std::codecvt<char16_t , char , mbstate_t >>(std::locale::classic ()).in (
32+ state, str.data (), str.data () + str.size (), pszNext, ret.data (), ret.data () + ret.size (), pwszNext);
3733
3834 if (res == std::codecvt_base::error) return u" " ;
3935
4036 // Remove extra null terminators that may have been created from multi-byte
4137 // UTF-8 characters
42- while (ret.size () > 0 && ret[ret. size () - 1 ] == u' \0 ' )
38+ while (ret.ends_with ( u' \0 ' ) )
4339 {
4440 ret.pop_back ();
4541 }
0 commit comments