【发布时间】:2015-02-19 23:58:55
【问题描述】:
我正在尝试使用Java ID3Tag Library 从 mp3 文件中检索 ID3 标签。但是在检索带有特殊字符(çáêü...)的字符串时出现了一些错误。所以我将这些字符串转换为字节数组:
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 等字符集中读取会导致字符 � 显示为字节 63。
【问题讨论】:
-
可能是库中的错误,或者无效的 MP3 文件(由生成它的程序有错误引起)。
-
ID3 标签是否在不同的程序(即您的音乐播放器)中正确显示?
-
是的,它们在其他程序中显示正确。
-
您可以通过包含用于读取标签的所有代码、在转换为字节数组 (
getBytes(StandardCharsets.UTF_8)) 时使用特定编码并给出完整的示例输出(例如 Arrays. toString(artByte) 和 tag.getLeadArtist())。