NewStringUTF和NewString接口测试
打开输入法“显示表情与符号”
右键,拷贝字符简介
🍌
香蕉
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";
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<const char *>(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));