Android问题笔记四十一:JNI NewStringUTF错误的几种解决方案

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,交流让学习不再孤单

👉实践过程

😜问题

这两天和同事联合开发应用,同事用C++开发 SO,而同事的代码来源于另一个远程同事的 C# 代码,中间跨度比较大,而且开发工具还不同。造成了以下问题:

java 复制代码
NewStringUTF input is not valid Modified UTF-8
java 复制代码
Abort message: 'JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0
string: '�'
input: '0xf4'
in call to NewStringUTF
from ......

一看就知道哪的编码出问题了。

😜解决

  1. 一定要特别注意 这个细节,平时开发 SO 的同事是从 Android Studio 中进行创建 C++ 文件的,在里面创建默认是 UTF-8 的编码格式,而一旦有更多人合作项目的话,其他人使用 VS 开发,或者其他开发工具写完代码,再给你代码文件,如果你不留意直接拷贝文件进去,然后编译,虽然编译通过,但是运行会出现如上的崩溃。这就是文件编码格式造成的问题,一定要和同事沟通好用 UTF-8 编码,或者你拿到代码文件后在 Studio 中自己弄一遍都可以。
  2. 出现字符编码的崩溃你可能在有的设备上运行没事,有的运行崩溃,这是因为不同平板在字符编码的支持上有所不同导致的。我遇见的问题就是国内的产品硬件不崩溃,国外的产品硬件崩溃。
  3. 特别注意在 Android 中的 String 类型,传递到 NDK 他们是 jstring 类型接收,这时候他们不能直接用,需要利用 GetStringUTFChars 转一下才可以。而 NDK 给 Java 需要 NewStringUTF 转一下才能回调出来。在这个过程中如果 NDK 需要用到里面的字符串做业务则需要转换(我好想说了废话,不用的话还传啥呢,哈哈)。
  4. 使用 Base64 进行数据传递,双方虽然多了一层编码解码的问题,但是能避免编码的坑。我们在给 HTML 传递数据的时候也是这样解决的(尤其是里面是 Json ,Json 里套Json字符串)。

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步 ☁️,我观你气度不凡 ,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞 👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。

相关推荐
xian_wwq5 分钟前
【学习笔记】提示词注入完全指南:五种变体,一套防御体系
笔记·学习·ai安全
元直数字电路验证5 分钟前
云计算实验笔记(二):PaaS 与容器化 —— 从 Docker 命令到 Kubernetes 全景图
笔记·云计算·paas
chushiyunen9 分钟前
php包管理工具composer笔记
笔记·php·composer
做cv的小昊9 分钟前
计算机图形学:【Games101】学习笔记06——几何(曲线和曲面、网格处理)、阴影图
c++·笔记·学习·游戏·图形渲染·几何学·光照贴图
2601_9611940210 分钟前
2026初级会计实务电子书pdf|官方教材+精讲笔记PDF
笔记·pdf
会编程的土豆13 分钟前
网络基础核心笔记(HTTP、TCP、前后端通信)
网络·笔记·http
zhangphil13 分钟前
Kotlin协程Flow及管道中的buffer和bufferCapacity
android·kotlin
AOwhisky22 分钟前
MySQL 学习笔记(第二期):SQL 语言之库表操作与数据类型
linux·运维·数据库·笔记·sql·学习·mysql
恋猫de小郭23 分钟前
一个 Linux 调度器优化,让 Android 多耗 20% 的电,传音工程师如何发现问题?
android·前端·ios
Kapaseker31 分钟前
一个圆屏逼得我好好学习 Compose MeasurePolicy
android·kotlin