【问题标题】:Charset error while reading ID3 tags读取 ID3 标签时出现字符集错误
【发布时间】: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())。

标签: java string mp3 id3 id3v2


【解决方案1】:

正如 immibis 所说,这可能是库中的错误。我最终使用了mp3agic 库,一切正常。

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多