我需要在Android中使用FFmpeg从轨道中提取元数据。我以这种方式将字符串返回Java:
...
auto titleEntry = av_dict_get(pFormatCtx->metadata, "title", nullptr, 0);
if (titleEntry != nullptr) *title = strdup(titleEntry->value);
...
ret= (jobjectArray)env->NewObjectArray(3,env->FindClass("java/lang/String"),env->NewStringUTF(""));
env->SetObjectArrayElement(ret, 1, env->NewStringUTF(title));
问题是带有Unicode字符的曲目的元数据被错误解释。
例如标题为
的曲目ਵਹਗਰਵਹਗਰ没有你(音高0.00-速度100)
成为
ਵà¹ààà°à¨µà¨¹à¨°0.00-速度10
。
使用MediaMetadataRetriever
以及其他音乐播放器可以正确显示曲目标题,但是即使是FFprobe命令行也无法正确显示曲目名称,并且从C ++或Java登录也无法正确解释字符串。
很明显,编码没有正确解释,我该如何解决?