const Pt::Char* ctype<Pt::Char>::do_narrow(const Pt::Char* begin, const Pt::Char* end, char dfault, char* dest) const { for(const Pt::Char* cur = begin; cur < end; ++cur) { *dest = do_narrow(*cur, dfault); ++dest; } return end; }
YBUTIL_DECL const std::string str2std(const String &s, const std::string &enc_name) { #if defined(YB_USE_WX) if (enc_name.empty()) return std::string(s.mb_str(wxConvUTF8)); wxCSConv conv(wxString(enc_name.c_str(), wxConvUTF8).GetData()); return std::string(s.mb_str(conv)); #elif defined(YB_USE_QT) if (enc_name.empty()) return std::string(s.toLocal8Bit().constData()); QTextCodec *codec = QTextCodec::codecForName(enc_name.c_str()); return std::string(codec->fromUnicode(s).constData()); #elif defined(YB_USE_UNICODE) std::locale loc(get_locale(enc_name).c_str()); return do_narrow(s, loc); #else return s; #endif }
YBUTIL_DECL const std::string str_narrow( const std::wstring &wide, const std::string &enc_name) { std::locale loc(get_locale(enc_name).c_str()); return do_narrow(wide, loc); }