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";
字符集与编码 - 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));