Python eyed3 UnicodeEncodeError:'ascii'编解码器无法对位置17中的字符u'\ xe9'进行编码:序数不在范围内(128)

时间:2015-06-26 18:01:05

标签: python eyed3

尝试使用eye3d 0.7.8-final

重命名目录中的所有文件
#! /usr/bin/env python
import os, sys, unicodedata, eyed3

def parse(sourcefile):
    audiofile = eyed3.load(sourcefile)
    if audiofile.tag.artist != audiofile.tag.artist:
        if audiofile.tag.title != audiofile.tag.title:
            temp = u"{0} - {1}.mp3".format(audiofile.tag.artist, audiofile.tag.title)
            os.rename(sourcefile, temp)

def main():
    for filelist in os.listdir('.'):
        if filelist.endswith('.mp3'):
           print u"Processing: {0}".format(filelist)
               parse(filelist)

if __name__ == "__main__":
    os.system('clear')
    main()

我虽然将“u”添加到temp和print会解决这些问题,但我仍然会得到

Traceback (most recent call last):
File "./test.py", line 19, in <module>
main()
File "./test.py", line 14, in main
print u"Processing: {0}".format(filelist)

UnicodeDecodeError: 'ascii' codec can't decode byte 0xcc in position 14: ordinal not in range(128)

我也试过这个

reload(sys)
sys.setdefaultencoding('utf8')

导致以下

Traceback (most recent call last):
File "./test.py", line 21, in <module>
main()
File "./test.py", line 14, in main
print u"Processing: {0}".format(filelist)

UnicodeEncodeError: 'ascii' codec can't encode character u'\u0308' in position 26: ordinal not in range(128)

Per @DevShark我设置了以下内容,但显示了相同的错误

temp = temp.encode('ascii','ignore')

Traceback (most recent call last):
File "./test.py", line 22, in <module>
main()
File "./test.py", line 15, in main
print u"Processing: {0}".format(filelist)

UnicodeEncodeError: 'ascii' codec can't encode character u'\u0308' in position 26: ordinal not in range(128)

因此,似乎文件已正确重命名,但

仍然存在问题
filelist = filelist.encode('ascii','ignore')
print u"Processing: {0}".format(filelist)

1 个答案:

答案 0 :(得分:-1)

我建议不要使用unicode来命名文件,而是使用ascii。根据您的操作系统,它可能会导致不良行为。

您可以在重命名文件之前添加以下行:

temp = temp.encode('ascii', 'ignore')

它将跳过文件名中的unicode字符,并修复您的代码。

如果你想保留unicode名称而不是ascii,我建议你确保你以前理解这些概念。如果没有明确的理解,这可能会导致很多痛苦。