当使用PyAudio (Port音频绑定)和ASIO+DirectSound支持时,以下代码:
import pyaudio
p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
print p.get_device_info_by_index(i)..。产生此错误:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 1: invalid continuation byte我们如何解决这个问题?
问题可能来自"pyaudio.py",第990行,因为utf8解码不成功:
return {'index' : index,
'structVersion' : device_info.structVersion,
'name' : device_info.name,这里的答案Special characters in audio devices name : Pyaudio (“不要使用PyAudio")并不令人满意。
溯源
...
{'defaultSampleRate': 44100.0, 'defaultLowOutputLatency': 0.0, 'defaultLowInputLatency': 0.12, 'maxInputChannels': 2L, 'structVersion': 2L, 'hostApi': 1L, 'index': 8, 'defaultHighOutputLatency': 0.0, 'maxOutputChannels': 0L, 'name': u'Microphone interne (Conexant 20672 SmartAudio HD)', 'defaultHighInputLatency': 0.24}
Traceback (most recent call last):
File "D:\test\test.py", line 5, in <module>
print p.get_device_info_by_index(i)
File "C:\ProgramData\Anaconda\lib\site-packages\pyaudio.py", line 977, in get_device_info_by_index
pa.get_device_info(device_index)
File "C:\ProgramData\Anaconda\lib\site-packages\pyaudio.py", line 990, in _make_device_info_dictionary
'name' : device_info.name,
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 1: invalid continuation byte发布于 2014-02-18 08:44:17
唯一成功的解决办法是:
非常感谢@cgohlke构建了新的现成安装程序:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio
发布于 2014-02-08 06:40:58
错误“无效的继续字节”使我认为文本对该特定索引是损坏的。
如果您能够修改pyaudio.py文件(或者让pyaudio.py文件返回名称),您可以尝试使用'Unicode‘来处理UTF-8解码。这需要一个最好的猜测,编码可以是什么。下面是他们的教程(http://www.crummy.com/software/BeautifulSoup/bs4/doc/#unicode-dammit)的链接
我认为代码看起来就像教程一样:
from bs4 import UnicodeDammit
dammit = UnicodeDammit(audiodevicename)
print(dammit.unicode_markup) ## Wéird Device Name!发布于 2014-02-14 13:25:06
我使用了分叉的pyAudio和修改的portaudiomodule.c代码
PyUnicode_DecodeFSDefault而不是
PyUnicode_FromString这很可能解决unicode问题。看看能不能帮上忙。
https://stackoverflow.com/questions/21578210
复制相似问题