You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android新版本中JNI::NewStringUTF的修改版UTF-8处理逻辑是否有变化?

Android 31+ 中 JNI::NewStringUTF 对4字节UTF-8的处理逻辑变更

是的,这个处理逻辑确实发生了变更。

早期Android版本的限制

在Android 31之前,JNI的NewStringUTF严格遵循Modified UTF-8编码规则:

  • Modified UTF-8不支持标准UTF-8的4字节序列(对应U+10000及以上的Unicode字符,比如大部分emoji),而是要求用两个UTF-16代理对的Modified UTF-8编码来表示这类字符。
  • 所以当传入包含4字节的标准UTF-8字符串时,会触发如下错误:

input is not valid Modified UTF-8

Android 31及以上的调整

从Android 31(API级别31)开始,ART运行时修改了NewStringUTF的实现:

  • 不再强制要求输入必须是Modified UTF-8,而是直接兼容标准UTF-8编码,包括4字节的字符序列。
  • 你测试的字符串十六进制转储如下,其中包含多个4字节UTF-8编码的emoji字符:
000000: e2 98 ba f0 9f 98 8a f0 9f 98 80 f0 9f 98 81 f0   ................
000010: 9f 98 82 f0 9f 98 83 f0 9f 98 84 f0 9f 98 af f0   ................
000020: 9f 98 89 f0 9f 98 88 f0 9f 98 87                  ...........

这类字符串现在可以被NewStringUTF正常解析并转换成Java字符串。

这个变更主要是为了简化JNI与Native层的字符串交互,减少开发者在编码转换上的适配成本,让标准UTF-8的使用更顺畅。

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 11:11:15