JNI接口

 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<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));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值