From 12990f3ca3e1fca8ec8f30c83147053b545fe579 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Thu, 31 Jan 2019 17:33:15 +0300 Subject: [PATCH] overlays/util: Strip extended codes from utf-16 encoded strings --- rpcs3/Emu/RSX/Overlays/overlays.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/RSX/Overlays/overlays.cpp b/rpcs3/Emu/RSX/Overlays/overlays.cpp index 27a4a9b0e0..f913e6e77d 100644 --- a/rpcs3/Emu/RSX/Overlays/overlays.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlays.cpp @@ -9,8 +9,15 @@ // Stupid MSVC bug when T is set to char16_t std::string utf16_to_utf8(const std::u16string& utf16_string) { + // Strip extended codes + auto tmp = utf16_string; + for (auto &c : tmp) + { + if (c > 0xFF) c = '#'; + } + std::wstring_convert, int16_t> convert; - auto p = reinterpret_cast(utf16_string.data()); + auto p = reinterpret_cast(tmp.data()); return convert.to_bytes(p, p + utf16_string.size()); } @@ -25,8 +32,15 @@ std::u16string utf8_to_utf16(const std::string& utf8_string) std::string utf16_to_utf8(const std::u16string& utf16_string) { + // Strip extended codes + auto tmp = utf16_string; + for (auto &c : tmp) + { + if (c > 0xFF) c = '#'; + } + std::wstring_convert, char16_t> convert; - return convert.to_bytes(utf16_string); + return convert.to_bytes(tmp); } std::u16string utf8_to_utf16(const std::string& utf8_string)