【发布时间】:2015-06-25 18:09:24
【问题描述】:
我正在从使用 Python 2.7.9 的 postgres 数据库中提取的列表中生成文件名。在这个列表中有带有特殊字符的单词。通常我使用''.join() 记录名称并将其发送到我的装载机,但我只有一个想要被识别的名称。 .py 设置为 utf-8 编码,但单词是葡萄牙语,我认为是 latin-1 编码。
from pydub import AudioSegment
from pydub.playback import play
templist = ['+ Orégano','- Búfala','+ Rúcola']
count_ins = (len(templist)-1)
while (count_ins >= 0 ):
kot_istructions = AudioSegment.from_ogg('/home/effe/voice_orders/Voz/'+"".join(templist[count_ins])+'.ogg')
count_ins-=1
play(kot_istructions)
前两个文件被加载:
/home/effe/voice_orders/Voz/+ Orégano.ogg
/home/effe/voice_orders/Voz/- Búfala.ogg
第三个应该是:
/home/effe/voice_orders/Voz/+ Rúcola.ogg
但是python正在尝试加载
/home/effe/voice_orders/Voz/+ R\xc3\xbacola.ogg
为什么只有这个?我尝试使用normalize() 删除重音,但由于这是一个字符串,因此该方法不起作用。
打印效果很好,因为数据库更新。只是文件名创建不能按预期工作。
建议?
【问题讨论】:
-
Unicode 字符串在 Python 2 中需要“u”前缀:
[u'+ Orégano', u'- Búfala', u'+ Rúcola']。 -
请务必使用迭代而不是手动计算索引。一个简单的
for word in templist就足够了。然后,摆脱 join-call,它只是偶然在这里工作,因为你只有一个参数是一个字符串 - 它并没有真正按照你的想法做。字符串表示看起来像正确的 utf-8 编码,问题是:您的文件系统的编码是 utf-8 吗? -
你考虑过使用 python 3 吗? Unicode 处理已重做。
-
@dlask :我无法编辑列表,因为它是实时生成的,并用于程序的各个部分。 @deets:有时我需要“即时”编辑索引计数,比
for/in循环编辑更快。我的文件系统(作为我的数据库)设置为LANG=pt_BR.UTF-8。 @A.L.Flanagan:我不能。我在 Odoo 中使用 python,我需要 Python 2.7。 -
不要在问题中加入答案(“已解决”之后的句子)。 Post it as your own answer instead
标签: python string unicode decode encode