diff --git a/libs/main/core/pistring.cpp b/libs/main/core/pistring.cpp index 3bfdf3c3..11d88b10 100644 --- a/libs/main/core/pistring.cpp +++ b/libs/main/core/pistring.cpp @@ -324,21 +324,8 @@ void PIString::buildData(const char * cp) const { const size_t len = MB_CUR_MAX*size()+1; data_ = (char *)malloc(len); sz = ucnv_fromUChars(cc, data_, len, (const UChar*)(PIDeque::data()), size_s(), &e); -// char uc[8]; -// data_.reserve(size_s()); -// for (int i = 0; i < size_s(); ++i) { -// if (at(i).isAscii()) { -// data_.push_back(uchar(at(i).unicode16Code())); -// } else { -// e = (UErrorCode)0; -// for (int j = 0; j < sz; ++j) { -// data_.push_back(uc[j]); -// } -// } -// } ucnv_close(cc); data_[sz] = '\0'; -// data_.push_back('\0'); return; } #else @@ -357,23 +344,10 @@ void PIString::buildData(const char * cp) const { data_[sz] = '\0'; return; # else - wchar_t wc; - //char tc[MB_CUR_MAX]; - mbstate_t state; - memset(&state, 0, sizeof(state)); - data_ = (char *)malloc(MB_CUR_MAX*size()+1); - char *p = data_; - for (int i = 0; i < size_s(); ++i) { -// if (at(i).isAscii()) { -// data_.push_back(uchar(at(i).toAscii())); -// continue; -// } - wc = at(i).toWChar(); - sz = wcrtomb(p, wc, &state); - if (sz < 0) break; - p += sz; - } - p[0] = '\0'; + std::wstring_convert, char16_t> ucs2conv; + std::string u8str = ucs2conv.to_bytes((char16_t*)PIDeque::data(), (char16_t*)PIDeque::data()+size()); + data_ = (char *)malloc(u8str.size()+1); + strcpy(data_, u8str.c_str()); # endif #endif }