Мне нужно использовать FFmpeg в Android для извлечения метаданных из треков. Я возвращаю строки в 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 также неправильно интерпретирует строку.
Очевидно, что кодировки интерпретируются неправильно, как я могу это исправить?