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/
📢这位道友请留步 ☁️,我观你气度不凡 ,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞 👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

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

相关推荐
优乐美香芋味好喝6 分钟前
2025年7月8日学习笔记——模式识别与机器学习绪论
笔记·学习·机器学习
IT猿手1 小时前
2025最新智能优化算法:沙狐优化(Rüppell‘s Fox Optimizer,RFO)算法求解23个经典函数测试集,完整MATLAB代码
android·算法·matlab·迁移学习·优化算法·动态多目标优化·动态多目标进化算法
aramae3 小时前
Python3 -- 第二章 基本数据类型
笔记·python
开发者如是说3 小时前
言叶是如何对文件进行端到端加密的
android·kotlin·swift
小李飞飞砖4 小时前
kotlin中的冷流和热流
android·开发语言·kotlin
nongcunqq4 小时前
逆向 qq 音乐 sign,data, 解密 response 返回的 arraybuffer
笔记
笑鸿的学习笔记4 小时前
qt-C++笔记之布局管理`space` 和 `margin`的区别
c++·笔记·qt
居然是阿宋4 小时前
【学习笔记】OkHttp源码架构解析:从设计模式到核心实现
笔记·学习·okhttp
HX4365 小时前
MP - Realm (not just realm)
android·ios·全栈
嘉小华5 小时前
Android 协程全景式深度解析:第一章 协程基础本质论
android