diff options
| author | JosJuice <josjuice@gmail.com> | 2020-06-28 19:16:23 +0200 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2020-07-08 14:52:05 +0200 |
| commit | f5da6e07d7405d89cc550b8c02f39a432f7888a3 (patch) | |
| tree | 1d369c87fa5c4cb8116c87baf5e3e8a6e267623a /Source/Android/jni/AndroidCommon/AndroidCommon.cpp | |
| parent | 38791eec1879b0a66d6ae920cfd6b42d9ae66dee (diff) | |
Android: Use correct encoding when converting strings
The functions with "UTF" in the name use "modified UTF-8" rather
than the standard UTF-8 which Dolphin uses, at least according
to Oracle's documentation, so it is incorrect for us to use them.
This change fixes the problem by converting between UTF-8 and
UTF-16 manually instead of letting JNI do it for us.
Diffstat (limited to 'Source/Android/jni/AndroidCommon/AndroidCommon.cpp')
| -rw-r--r-- | Source/Android/jni/AndroidCommon/AndroidCommon.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/Source/Android/jni/AndroidCommon/AndroidCommon.cpp b/Source/Android/jni/AndroidCommon/AndroidCommon.cpp index cb7b9ff073..1f9973d451 100644 --- a/Source/Android/jni/AndroidCommon/AndroidCommon.cpp +++ b/Source/Android/jni/AndroidCommon/AndroidCommon.cpp @@ -5,25 +5,28 @@ #include "jni/AndroidCommon/AndroidCommon.h" #include <string> +#include <string_view> #include <vector> #include <jni.h> +#include "Common/StringUtil.h" + std::string GetJString(JNIEnv* env, jstring jstr) { - std::string result = ""; - if (!jstr) - return result; - - const char* s = env->GetStringUTFChars(jstr, nullptr); - result = s; - env->ReleaseStringUTFChars(jstr, s); - return result; + const jchar* jchars = env->GetStringChars(jstr, nullptr); + const jsize length = env->GetStringLength(jstr); + const std::u16string_view string_view(reinterpret_cast<const char16_t*>(jchars), length); + const std::string converted_string = UTF16ToUTF8(string_view); + env->ReleaseStringChars(jstr, jchars); + return converted_string; } jstring ToJString(JNIEnv* env, const std::string& str) { - return env->NewStringUTF(str.c_str()); + const std::u16string converted_string = UTF8ToUTF16(str); + return env->NewString(reinterpret_cast<const jchar*>(converted_string.data()), + converted_string.size()); } std::vector<std::string> JStringArrayToVector(JNIEnv* env, jobjectArray array) |
