Android: fix handling non-latin characters on older Android devices (#9309)
authorMaksim <MoNTE48@mail.ua>
Fri, 17 Apr 2020 21:46:30 +0000 (23:46 +0200)
committerGitHub <noreply@github.com>
Fri, 17 Apr 2020 21:46:30 +0000 (23:46 +0200)
src/server.cpp
src/util/string.cpp

index b3992b9b15197f69c915ecdbe59888d467f4203f..c32aa53062a75e42f6a2bb147f4559117bfc93f9 100644 (file)
@@ -3031,8 +3031,16 @@ std::wstring Server::handleChat(const std::string &name, const std::wstring &wna
                line += L"-!- You don't have permission to shout.";
                broadcast_line = false;
        } else {
+               /*
+                       Workaround for fixing chat on Android. Lua doesn't handle
+                       the Cyrillic alphabet and some characters on older Android devices
+               */
+#ifdef __ANDROID__
+               line += L"<" + wname + L"> " + wmessage;
+#else
                line += narrow_to_wide(m_script->formatChatMessage(name,
                                wide_to_narrow(wmessage)));
+#endif
        }
 
        /*
index e6c52585d828d05b4c074a4e9254412f6bfc89c2..2ee3ec73569d8271bcb61023db732217b01f509b 100644 (file)
@@ -209,6 +209,9 @@ wchar_t *narrow_to_wide_c(const char *str)
 }
 
 std::wstring narrow_to_wide(const std::string &mbs) {
+#ifdef __ANDROID__
+       return utf8_to_wide(mbs);
+#else
        size_t wcl = mbs.size();
        Buffer<wchar_t> wcs(wcl + 1);
        size_t len = mbstowcs(*wcs, mbs.c_str(), wcl);
@@ -216,11 +219,15 @@ std::wstring narrow_to_wide(const std::string &mbs) {
                return L"<invalid multibyte string>";
        wcs[len] = 0;
        return *wcs;
+#endif
 }
 
 
 std::string wide_to_narrow(const std::wstring &wcs)
 {
+#ifdef __ANDROID__
+       return wide_to_utf8(wcs);
+#else
        size_t mbl = wcs.size() * 4;
        SharedBuffer<char> mbs(mbl+1);
        size_t len = wcstombs(*mbs, wcs.c_str(), mbl);
@@ -229,6 +236,7 @@ std::string wide_to_narrow(const std::wstring &wcs)
 
        mbs[len] = 0;
        return *mbs;
+#endif
 }