`

Android 播放mp3 tag乱码分析之jni 篇

 
阅读更多

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

分享到:
评论

相关推荐

    android下一个jni方式实现的音频播放

    通过这个示例,开发者不仅可以学习如何在Android中使用JNI进行音频播放,还可以了解Android音频系统的底层工作原理,这对于开发高质量的音乐应用或游戏至关重要。同时,它也是一个实践NDK编程、提高跨平台能力的良好...

    android jni获取 Mac地址

    在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。当需要执行一些性能敏感或者Java无法直接处理的任务时,开发者通常会利用JNI调用C/C++原生代码。本话题关注的...

    android通过JNI访问硬件LED

    在Android系统中,Java Native Interface (JNI) 是一个关键组件,允许Java代码与其他语言(如C++或C)编写的代码进行交互。本项目聚焦于如何利用JNI来访问硬件资源,特别是控制LED设备。以下是对这个主题的详细阐述...

    解决JNI中文乱码

    解决JNI中文乱码,

    serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_

    `serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_`这个项目就是关于如何使用JNI来实现Android设备的串口读写的示例。 首先,我们需要了解JNI的概念。JNI是Java平台提供的一种接口,允许Java代码...

    Android NDK JNI 经典实例

    Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例

    android之jniDemo

    《Android之JNI实战指南》 在移动开发领域,Android与C/C++的交互是一个重要的技术环节,这主要得益于JNI(Java Native Interface)的存在。JNI允许Java代码与其他编程语言(如C/C++)编写的代码进行交互,使得我们...

    Android--JNI-Device.zip_Android jni_android_jni_jni android

    通过分析描述和标签,我们可以深入探讨JNI在Android中的应用以及如何利用它来调用驱动代码。 1. **JNI基本概念**:JNI是Java平台的一部分,提供了一个标准的方式,让Java代码可以调用本地(native)代码,同时也...

    android-jni.zip_Android jni_android_jni_jni android

    Android JNI(Java Native Interface)是Android系统中一个重要的技术,它允许Java代码和其他语言写的代码进行交互。JNI在Android开发中扮演着不可或缺的角色,尤其是在进行性能优化、利用硬件加速、调用C/C++库或者...

    Android JNI demo

    Android JNI(Java Native Interface)是Android开发中的一个重要概念,它为Java代码提供了与本地C/C++代码交互的能力。JNI在Android应用开发中的作用主要体现在以下几个方面: 1. 性能优化:对于计算密集型任务...

    Android调用Jni返回自定义对象

    在Android开发中,Java Native Interface (JNI) 是一个关键的工具,它允许Java代码与本地C/C++代码交互。JNI的使用场景广泛,包括优化性能、利用硬件特性、调用已有的C/C++库等。当涉及到Android调用JNI并返回自定义...

    Android之JNI初级篇

    这篇名为“Android之JNI初级篇”的文章很可能是对初学者介绍如何在Android应用中使用JNI的基础知识。 首先,JNI的核心是为Java提供了一个接口,通过这个接口,Java代码可以调用本地(native)代码,即用C/C++编写的...

    jni.zip_Android jni_android_jni_jni android

    本资源“jni.zip_Android jni_android_jni_jni android”包含了一份关于Android环境下JNI使用的详细指南。 JNI的核心概念主要包括以下几个方面: 1. **本地方法接口**:JNI定义了一套API,使得Java代码可以调用C/...

    Android中JNI实现AES加密源代码

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI常用于提高应用程序性能,访问特定硬件功能,或者像本例中所示,执行安全操作,如AES加密。AES...

    Android Studio JNI 调用demo

    通过分析这个项目,可以更深入地理解JNI的使用方法,包括如何在Android Studio中设置,如何编写C/C++代码,以及如何在Java中调用这些本地方法。 总结,"Android Studio JNI 调用demo"是一个实践教程,旨在帮助...

    android jni 屏幕截图 NativeScreenCapture

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与本地(C/C++)代码进行交互。本项目“android jni 屏幕截图 NativeScreenCapture”专注于利用JNI技术来实现Android设备的屏幕截图...

    JniCallback.zip_Android jni_android_jni android_jni callback_jni

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都非常有用,比如优化性能、使用现有的C/C++库、或者像在这个“JniCallback.zip”文件...

    android jni调用demo

    通过分析这个项目,开发者可以了解如何在实际项目中使用JNI,以及如何在Android Studio中集成NDK开发环境。这个过程对于深入学习Android的系统级编程和性能优化至关重要。 总的来说,Android的JNI调用是将Java和C/...

    Android JNI之OpenSSL

    《Android JNI之OpenSSL详解》 在Android应用开发中,JNI(Java Native Interface)是一种连接Java和本地代码的桥梁,允许开发者使用C/C++代码来实现高性能或特定平台的功能。OpenSSL是一个强大的安全套接层密码库...

    android studio jni demo

    Android Studio JNI Demo是一个关于在Android开发环境中使用Java Native Interface(JNI)的实例教程。JNI是Android平台中用于在Java代码和本地C/C++代码之间建立桥梁的技术,它允许开发者利用C/C++的强大性能来处理...

Global site tag (gtag.js) - Google Analytics