Convert a locale defined multibyte coding to UTF-32 string for easier character processing.
| 164 | //! Convert a locale defined multibyte coding to UTF-32 string for easier |
| 165 | //! character processing. |
| 166 | static u32string fromLocaleMB(const std::string& str) |
| 167 | { |
| 168 | u32string rv; |
| 169 | u32string::value_type ch; |
| 170 | size_t pos = 0; |
| 171 | ssize_t sz; |
| 172 | std::mbstate_t state{}; |
| 173 | while ((sz = mbrtoc32(&ch,&str[pos], str.size() - pos, &state)) != 0) { |
| 174 | if (sz == -1 || sz == -2) |
| 175 | break; |
| 176 | rv.push_back(ch); |
| 177 | if (sz == -3) /* multi value character */ |
| 178 | continue; |
| 179 | pos += sz; |
| 180 | } |
| 181 | return rv; |
| 182 | } |
| 183 | |
| 184 | //! Convert a UTF-32 string back to locale defined multibyte coding. |
| 185 | static std::string toLocaleMB(const u32string& wstr) |
no test coverage detected