我现在正在学习python和PyGTK,并创建了一个简单的音乐管理器。 http://pastebin.com/m2b596852 但当它用挪威字母æ,å和å编辑歌曲时,它只是把它们变成了一个奇怪的角色。
那么,有没有什么好的方法可以将名字打开或编码成utf-8字符呢?
从文件中读取信息:
def __parse(self, filename):
"parse ID3v1.0 tags from MP3 file"
self.clear()
self['artist'] = 'Unknown'
self['title'] = 'Unknown'
try:
fsock = open(filename, "rb", 0)
try:
fsock.seek(-128, 2)
tagdata = fsock.read(128)
finally:
fsock.close()
if tagdata[:3] == 'TAG':
for tag, (start, end, parseFunc) in self.tagDataMap.items():
self[tag] = parseFunc(tagdata[start:end])
except IOError:
pass
打印到sys.stdout信息:
for info in files:
try:
os.rename(info['name'],
os.path.join(self.dir, info['artist'])+' - '+info['title']+'.mp3')
print 'From: '+ info['name'].replace(os.path.join(self.dir, ''), '')
print 'To: '+ info['artist'] +' - '+info['title']+'.mp3'
print
self.progressbar.set_fraction(i/num)
self.progressbar.set_text('File %d of %d' % (i, num))
i += 1
except IOError:
print 'Rename fail'
我不知道mp3标签使用什么编码,但如果您确定它是UTF-8,那么:
行
# -*- coding: utf-8 -*-
定义源代码编码,而不定义用于读取或写入文件的编码。您需要将从文件中读取的bytestrings转换为Unicode字符串。看一下您的代码,我将在解析函数中执行此操作,即用如下内容替换
stripnulls
注意,只有当文件中的字符串实际上是用UTF-8编码的时候,这才起作用——如果它们是用不同的编码,那么您必须使用来自
codecs
模块的相应解码函数。首先要将输入从它所在的字符集解码为utf-8(在Python中,encode意味着“将它从unicode/utf-8转换为其他字符集”)。
一些google建议挪威字符集是普通的ole'iso-8859-1'。。。如果我在这个细节上错了,我希望有人能纠正我。无论如何,无论以下示例中字符集的名称是什么:
在一个真实的应用程序中,我意识到你不能保证输入是挪威语或任何其他字符集。在这种情况下,您可能希望继续执行一系列可能的字符集,以查看哪些字符集可以成功转换。SO和Google都对在Python中有效实现这一点的算法提出了一些建议。听起来比实际情况更可怕。
相关问题 更多 >
编程相关推荐