JNI接口

 NewStringUTF和NewString接口测试

打开输入法“显示表情与符号”

JNI接口_第1张图片

右键,拷贝字符简介


香蕉
Unicode: U+1F34C,UTF-8: F0 9F 8D 8C

unicode码   \U0001f34c

utf-8编码为0xf09f8d8c,结合char或char8_t的长度,需要切分为0xf0 0x9f 0x8d 0x8c

utf-16编码为0xd83cdf4c,结合char16_t的长度,需要切分为0xd83c 0xdf4c

可以在AS中将复制到字符串双引号中,即可使其现出UTF-16编码

const char* str = "\uD83C\uDF4C";

字符集与编码 - cppreference.com

字符字面量 - cppreference.com

字符串字面量 - cppreference.com

转义序列 - cppreference.com

NewStringUTF的入参为const char*类型

NewString的入参为const jchar*类型,即const uint16_t*

    const char *str1 = "\xf0\x9F\x8d\x8c";  // 使用utf-8编码
    jstring emoji1 = env->NewStringUTF(str1);

    const char8_t *str2 = u8"\xf0\x9F\x8d\x8c"; // 使用utf-8编码 , 类型char8_t可强转为char
    jstring emoji2 = env->NewStringUTF(reinterpret_cast(str2));

    const char *str3 = "\U0001f34c";    // 使用unicode码值 
    jstring emoji3 = env->NewStringUTF(str3);

//    const char16_t *str4 = u"\xD83C\xDF4C";
//    jstring emoji4 = env->NewStringUTF(translate(str4));  // 必须转为char编码单元

    // jchar为16位整数,符合utf-16的编码单元
    const jchar str5[] = {0xD83C, 0xDF4C};
    // 0001 1111 0011 0100 1100 
    // -0x10000
    // 0000 1111 0011 0100 1100
    // 00'00 1111 00'11' 0100 1100
    // 填入
    // 110110‘ 00’ 00111100‘ 110111’ 11‘ 01001100
    // d83c df4c  utf-16码 
    jstring emoji5 = env->NewString(str5, sizeof(str5) / sizeof(jchar));

你可能感兴趣的:(java,c++,jni)