Ошибка набора символов при чтении тегов ID3

Я пытаюсь извлечь теги ID3 из файлов mp3 с помощью Java ID3Tag Library. Но я получаю некоторые ошибки при извлечении строк со специальными символами (çáêü...). Итак, я преобразовал эти строки в массивы байтов:

ID3v2_4 tag=(ID3v2_4) mp3file.getID3v2Tag();
byte [] artBytes=tag.getLeadArtist().getBytes();
for (int i=0;i<artBytes.length;i++){
   System.out.println(artBytes[i]);
}

А потом я обнаружил, что каждый неизвестный символ (а также первые байты в строке) читается как трехбайтовая последовательность -17 -65 -67 (� в строке). Кроме того, после каждой буквы стоит байт 0. Итак, если я хочу прочитать Blue Öyster Cult, я получаю что-то вроде «B l u e � y s t e r Cult».

Что я могу сделать, чтобы нормализовать эти строки?

[РЕДАКТИРОВАТЬ]

  • Некоторые mp3-файлы со специальными символами отображаются корректно.

  • Чтение из кодировок, таких как US_ASCII или ISO_8859_1, приведет к тому, что символ � будет отображаться как байт 63.


person Giovani de Quadros    schedule 19.02.2015    source источник
comment
Вероятно, ошибка в библиотеке или недопустимый файл MP3 (вызванный ошибкой программы, сгенерировавшей его).   -  person user253751    schedule 20.02.2015
comment
Правильно ли отображается тег ID3 в другой программе, например в вашем музыкальном проигрывателе?   -  person Adrian Leonhard    schedule 20.02.2015
comment
Да, в других программах они отображаются корректно.   -  person Giovani de Quadros    schedule 20.02.2015
comment
Вы можете улучшить свой вопрос, включив весь код, который вы используете для чтения тега, используя определенную кодировку при преобразовании в массив байтов (getBytes(StandardCharsets.UTF_8)) и предоставив полный пример вывода (например, Arrays.toString(artByte) и tag.getLeadArtist() ).   -  person Adrian Leonhard    schedule 20.02.2015


Ответы (1)


Как сказал иммибис, это, вероятно, была ошибка в библиотеке. В итоге я использовал библиотеку mp3agic, и все заработало нормально.

person Giovani de Quadros    schedule 21.02.2015