gpt4 book ai didi

java - 在 JNI 中将 JString 转换为 String 时的 UTF 8 特殊字符

转载 作者:搜寻专家 更新时间:2023-10-31 02:23:09 32 4
gpt4 key购买 nike

我试图在 JNI 中将字符串转换为 JString,但是当字符串包含 UTF 8 特殊字符时,它似乎没有以正确的方式保存。

例如:“Avda. Espaᡬ 1” 应该是“Avda.西类牙 1”。

这是我的代码:

jstr= env->NewStringUTF(str.c_str());

有没有一种方法可以转换为指定 UTF 8 字符集的 JString?

最佳答案

我从某处复制了这些,添加了异常处理。他们在生产中工作。

// jstring to std::wstring
std::wstring jstr2wsz(JNIEnv *env, jstring string)
{
std::wstring wStr;
if (string == NULL)
{
return wStr; // empty string
}

try
{
const jchar *raw = env->GetStringChars(string, NULL);
if (raw != NULL)
{
jsize len = env->GetStringLength(string);
wStr.assign(raw, raw + len);
env->ReleaseStringChars(string, raw);
}
}
catch (const std::exception ex)
{
std::cout << "EXCEPTION in jstr2wsz translating string input " << string << std::endl;
std::cout << "exception: " << ex.what() << std::endl;
}
return wStr;
}

// std::wstring to jstring
jstring wsz2jstr(JNIEnv *env, std::wstring cstr)
{
jstring result = nullptr;
try
{
int len = cstr.size();
jchar* raw = new jchar[len];
memcpy(raw, cstr.c_str(), len * sizeof(wchar_t));
result = env->NewString(raw, len);
delete[] raw;
return result;
}
catch (const std::exception ex)
{
std::wcout << L"EXCEPTION in wsz2jstr translating string input " << cstr << std::endl;
std::cout << "exception: " << ex.what() << std::endl;
}

return result;

关于java - 在 JNI 中将 JString 转换为 String 时的 UTF 8 特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29547798/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com