| 1796 | const char l_Utf8Replacement[] = "\xEF\xBF\xBD"; |
| 1797 | |
| 1798 | String Utility::ValidateUTF8(const String& input) |
| 1799 | { |
| 1800 | std::string output; |
| 1801 | output.reserve(input.GetLength()); |
| 1802 | |
| 1803 | try { |
| 1804 | utf8::replace_invalid(input.Begin(), input.End(), std::back_inserter(output)); |
| 1805 | } catch (const utf8::not_enough_room&) { |
| 1806 | output.insert(output.end(), (const char*)l_Utf8Replacement, (const char*)l_Utf8Replacement + 3); |
| 1807 | } |
| 1808 | |
| 1809 | return String(std::move(output)); |
| 1810 | } |
| 1811 | |
| 1812 | #ifdef _WIN32 |
| 1813 | /* mkstemp extracted from libc/sysdeps/posix/tempname.c. Copyright |