gpt4 book ai didi

java - ™ 字符未被 GetStringChars() 正确翻译

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:57 24 4
gpt4 key购买 nike

我注意到商标字符 似乎没有被 Java 8 中 JNI 的 GetStringChars() 函数正确翻译,它应该翻译 Unicode 字符。 GetStringUTFChars() 方法也有同样的问题。

这不是什么大问题,因为有简单的解决方法(在调用 JNI 函数之前从字符串中删除 Unicode 字符)。

但是我在谷歌搜索没有发现类似的问题,所以我来这里看看有没有人对此有解释? (或者我的代码中遗漏了什么?)

我在 MinGW 下使用 Java 8 和 g++ 4.8。

这是我的代码片段:

JNIEXPORT void JNICALL Java_MyClass_JNI_myMethod (JNIEnv * env , jobject obj, jstring input_string)
{
const jchar *inp_string = (*env).GetStringChars(input_string, NULL);
const jchar *jch_inp_string = inp_string;
(*env).ReleaseStringChars(input_string, inp_string);

std::cout << jch_inp_string <<'\n';
}

例如,使用这个函数,如果我输入这个字符串:

Random String™

它输出这个:

Random Stringâ„¢

最佳答案

在深入研究文档后,我找到了一个解决方法,这是因为 java 仅支持修改后的 UTF8,这意味着它足以打印 XML 文档,但不能无错误地打印 latin-1 编码字符。

为此,我从 C++ 调用了 java,并让他将他的 utf8 修改字符转换为符合我需要的编码。我想知道是否有最简单的方法,但我发现 JNI 本身提供的字符串不完全符合非常常见的标准,这很奇怪。

JNIEXPORT void JNICALL Java_MyClass_JNI_myMethod (JNIEnv * env , jobject obj, jstring input_string){

//this calls back JNI to reformat the string form java UTF8 modified encoding to something more common
const jclass stringClass = env->GetObjectClass(input_string);
const jmethodID getBytes = env->GetMethodID(stringClass, "getBytes", "(Ljava/lang/String;)[B");
const jstring charsetName = env->NewStringUTF("windows-1252");
const jbyteArray stringJbytes = (jbyteArray) env->CallObjectMethod(input_string, getBytes, charsetName);
env->DeleteLocalRef(charsetName);
const jsize length = env->GetArrayLength(stringJbytes);
const jbyte* strBytes = env->GetByteArrayElements(stringJbytes, NULL);


//this make sure our string is C/C++ compliant with null character
//but it seems to work well without too
char* my_string = malloc(length+1);
memcpy( my_string , strBytes, length);
my_string [length] = '\0';

env->ReleaseByteArrayElements(stringJbytes, strBytes , JNI_ABORT);
env->DeleteLocalRef(stringJbytes);

std::cout << my_string << std::endl;

}

关于java - ™ 字符未被 GetStringChars() 正确翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43163819/

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