我目前面临一个难题。我需要在法语 Windows 环境中使用 Pyaudio,并且音频设备的名称默认包含é
或è
。
这是出现特殊字符时出现的错误:
u=self.p.get_device_info_by_index(e)
File "C:\Python27\lib\site-packages\pyaudio.py", line 977, in get_device_info_
by_index
pa.get_device_info(device_index)
File "C:\Python27\lib\site-packages\pyaudio.py", line 987, in _make_device_inf
o_dictionary
print device_info.name
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 13: invalid
continuation byte
如果我可以访问代码,这将不是问题(我猜我需要在字符串链前面添加一个 u"...")。
问题是我查看了 Pyaudio 代码,导致错误的方法在 pyd 文件(_portaudio.pyd)中定义,因此,我无法修改它!
我试图下载 _portaudio 来自己编译它,但我发现的发行版是用 C 编码的,而且相当繁重(我不知道关于 C 的第一件事)。也许我可以在那里做点什么,但我不知道确切的地点和方式。
我也可以通过仅注释获取音频设备名称的行来解决此问题,但是如果没有向用户显示其名称,则要识别特定的音频输入要困难得多。
编辑 :
这是整个过程:我从 pyaudio 调用该函数:
import pyaudio
self.p= pyaudio.PyAudio()
i=self.p.get_device_count()
for e in range(i):
u=self.p.get_device_info_by_index(e)
这将引导我进入调用该方法的 pyaudio 模块:
device_info.name
device_info 是 _portaudio.pyd 中定义的对象。由于特定音频设备的名称包含“é”或“è”(谢谢 windows),并且 _portaudio.pyd 未编码以处理这些字符。它返回错误:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 13: invalid
continuation byte