文件可以有cp1251
和utf-8
编码。我应该:
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}$我的代码怎么了?在
文档对此非常不清楚,但似乎eyeD3只接受1/Unicode或2/bytes编码的标记,这些标记使用当前语言环境的编码(然后用它将标记转换回Unicode)。在
因此,我认为你的方法根本行不通。基本上,你不能将任意编码的数据传递给eyeD3,就像你在脚本的倒数第二行中所做的那样。在
eyeD3似乎确实提供了与编码相关的设施,不过:
然而,从读取该函数的代码来看,ID3规范只允许一些特定的编码,而iso-8859-5不在其中。在
因此,ID3规范似乎不允许您尝试执行的操作。如果你想在这里做的是解决这个问题,那么接下来的eyeD3恐怕不会有帮助。在
也许你会想重新表述你的问题,确切地说,你想通过修改标签编码来达到什么目的?然后可以提出其他解决办法。在
相关问题 更多 >
编程相关推荐