Грешка в набора от знаци при четене на 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 C u l t.

Какво мога да направя, за да нормализирам тези низове?

[РЕДАКТИРАНЕ]

  • Няколко mp3 файла със специални знаци се показват правилно.

  • Четенето от набори от знаци като US_ASCII или ISO_8859_1 ще доведе до показване на char � като байт 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)


Както immibis каза, вероятно е бил бъг в библиотеката. В крайна сметка използвах библиотеката mp3agic и всичко работи добре.

person Giovani de Quadros    schedule 21.02.2015