Android media 扫描mp3文件这个重任是cpp来完成的。但是tag解析工作是上层java完成的。

乱码问题的根源是:

java内部是使用16bit的unicode编码(UTF-16)来表示字符串的,无论中文英文都是2字节 ; jni内部是使用UTF-8编码来表示字符串的,UTF-8是变长编码的unicode,一般ascii字符是1字节,中文是3字节 ; c/c++使用的是原始数据,ascii就是一个字节了,中文一般是GB2312编码,用两个字节来表示一个汉字

解决办法是:

jni返回给java的字符串,c/c++首先应该负责把这个字符串变成UTF-8或者UTF-16格式,然后通过NewStringUTF或者NewString来把它封装成jstring,返回给java就可以了。

若ASCII码直接转换:

result=(env)->NewStringUTF(str );

若含有中文字符:
int length =mbstowcs(wchar_t *wcstr,const char *mbstr,size_t count);

这个函数的第三个参数count,大小一定要是mbstr长度的2倍,否则出来的中文也会是乱码

buffer = (unsigned short *)malloc( length*2 + 1 );
result=(env)->NewString( (jchar*)buffer, length );

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 分支和循环(二)(零基础学习C语言)
  3. Android客户端与服务端交互之登陆示例
  4. 阿里巴巴的FastJson数据解析介绍
  5. 微信 JSSDK 在 Android(安卓)和 iOS 的一处不一致
  6. Android(安卓)API 中文 (15) ―― GridView
  7. android 联系人快速搜索
  8. 巨佬Jake Wharton谈Android对Java 8的支持
  9. Java中怎样判断一个字符串是否是数字

随机推荐

  1. 自动安装nginx脚本
  2. 最强指南!超级全面的企业报表平台建设白皮
  3. Python 内置模块之 random
  4. 【深度学习】③--神经网络细节与训练注意
  5. RHEL7.6安装Oracle11g数据库--4、创建数
  6. 2021年国内BI厂商推荐_大数据分析工具
  7. 程序员职业发展方向有哪些?
  8. 技多不压身,手把手教你零基础秒上手成为数
  9. 图表控件AnyChart如何使用JavaScript创建
  10. 点云处理库pclpy安装