如何将eye3D模块的标签编码改为iso88595?

2024-09-29 19:19:16 发布

您现在位置:Python中文网/ 问答频道 /正文

文件可以有cp1251utf-8编码。我应该:

  1. 删除id3 v2标记
  2. 将id3 v1标记的编码更改为iso-8859-5

我做以下工作:

def getTagStr (tagUnicStr):
    # gets the 1byte 8bits string, as written in the tag, from the unicode, returned by tag.get*
    # taken from tag2utf-0.16 by Kopats Andrei
    ls = []
    for i in range(0,len(tagUnicStr)):
        if (ord(tagUnicStr[i]) in range(256)):
            ls.append(chr(ord(tagUnicStr[i])))
        else:
            ls.append(tagUnicStr[i])
    Str8 = ''.join(ls)
    return Str8

trackInfo = eyeD3.Mp3AudioFile(path)
tag = trackInfo.getTag()
tag.link(path)
mp3artist = tag.getArtist() # contains Russian characters
mp3artist = getTagStr(mp3artist)
mp3encoding = 'utf-8'
try:
    # pseudo utf-8 encoding
    mp3artist = mp3artist.decode('utf-8')
except UnicodeDecodeError, err:
    # cp1251
    mp3artist = mp3artist.decode('cp1251')
    mp3encoding = 'cp1251'
except UnicodeEncodeError, err:
    # utf-8
    pass

tag.setArtist(mp3artist.encode('iso-8859-5'))
tag.update()

最后一行出现以下错误:

^{pr2}$

我的代码怎么了?在


Tags: theinfrom标记编码bytagiso
1条回答
网友
1楼 · 发布于 2024-09-29 19:19:16

文档对此非常不清楚,但似乎eyeD3只接受1/Unicode或2/bytes编码的标记,这些标记使用当前语言环境的编码(然后用它将标记转换回Unicode)。在

因此,我认为你的方法根本行不通。基本上,你不能将任意编码的数据传递给eyeD3,就像你在脚本的倒数第二行中所做的那样。在

eyeD3似乎确实提供了与编码相关的设施,不过:

tag.setTextEncoding(encoding)

然而,从读取该函数的代码来看,ID3规范只允许一些特定的编码,而iso-8859-5不在其中。在

因此,ID3规范似乎不允许您尝试执行的操作。如果你想在这里做的是解决这个问题,那么接下来的eyeD3恐怕不会有帮助。在

也许你会想重新表述你的问题,确切地说,你想通过修改标签编码来达到什么目的?然后可以提出其他解决办法。在

相关问题 更多 >

    热门问题