Python eyed3 UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 17: ordinal not in range(128)
Python eyed3 UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 17: ordinal not in range(128)
正在尝试使用 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)
根据@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)
我建议不要使用 unicode 来命名文件,而是使用 ascii。根据您的操作系统,它可能会导致不良行为。
您可以在重命名文件之前添加以下行:
temp = temp.encode('ascii', 'ignore')
它只会跳过文件名中的 unicode 字符,并修复您的代码。
如果你想保留 unicode 名称而不是 ascii,我建议你确保你之前已经很好地理解了这些概念。如果在没有清晰理解的情况下完成这些事情,其中之一可能会导致很多痛苦。
正在尝试使用 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)
根据@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)
我建议不要使用 unicode 来命名文件,而是使用 ascii。根据您的操作系统,它可能会导致不良行为。
您可以在重命名文件之前添加以下行:
temp = temp.encode('ascii', 'ignore')
它只会跳过文件名中的 unicode 字符,并修复您的代码。
如果你想保留 unicode 名称而不是 ascii,我建议你确保你之前已经很好地理解了这些概念。如果在没有清晰理解的情况下完成这些事情,其中之一可能会导致很多痛苦。