2014-02-05 20 views
6

목록 :PyAudio 'UTF8'오류 장치

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 1: invalid continuation byte 

방법 :

import pyaudio 

p = pyaudio.PyAudio() 
for i in range(p.get_device_count()): 
    print p.get_device_info_by_index(i) 

을 ...이 오류가 발생합니다 이 문제를 해결할 수 있습니까?

  return {'index' : index, 
        'structVersion' : device_info.structVersion, 
        'name' : device_info.name, 

여기이 답변 Special characters in audio devices name : Pyaudio ("PyAudio를 사용하지 마십시오


문제로 인해 unsucessful UTF8 디코딩의"pyaudio.py ", 줄 990에서 올 수

") 만족스럽지 않습니다.


역 추적

... 
{'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 
+0

전체 추적 표시 ... – geoffspear

+0

Traceback @Wooble을 추가했습니다. – Basj

+0

추적 코드가 사용자의 코드와 일치하지 않지만 pyaudio에서 내부 오류가 발생합니다. 그들과 함께 버그 보고서를 제출하려 했습니까? – geoffspear

답변

1

발견 유일한 성공적인 솔루션은 다음과 같습니다

새 읽기를 작성한 것에 대해 많은 감사를드립니다. Y-사용 설치 : http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio

5

오류 '잘못된 연속 바이트는'나 텍스트가 특정 인덱스의 손상이라고 생각합니다.

pyaudio.py 파일을 수정하거나 (이름 만 반환하도록 pyaudio.py 파일을 얻을 수있는 경우) 'Unicode Dammit'을 사용하여 UTF-8 디코딩을 직접 처리 할 수 ​​있습니다. . 인코딩이 할 수있는 것을 가장 잘 추측합니다.

from bs4 import UnicodeDammit 

dammit = UnicodeDammit(audiodevicename) 
print(dammit.unicode_markup) ## Wéird Device Name! 
+0

지옥 그 대답이 OP를 돕는 지 알 수 없지만이 라이브러리를 언급하는 데 +1 할 생각입니다. 좋은! – Fenikso

+0

+1,하지만 불행히도 문제가 해결되지 않았습니다 ... – Basj

1

내가 pyAudio을 포크 대신

PyUnicode_DecodeFSDefault 

를 사용하는 https://github.com/joelewis/PyAudio/blob/master/src/_portaudiomodule.c 코드를 수정 한 다음은 자신의 튜토리얼에 대한 링크입니다 (http://www.crummy.com/software/BeautifulSoup/bs4/doc/#unicode-dammit)

나는 코드가 바로 튜토리얼처럼 보일 것 같아

PyUnicode_FromString 

아마도 uni 코드 문제. 도움이되는지 확인하십시오.

포크 : https://github.com/joelewis/PyAudio/

0

내가 여기에 단서가

(아마도 name 필드) get_device_info_by_index()에 의해 반환 된 어떤 이유 뭔가를 UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 1: invalid continuation byte

생각은 당신이 경우, 바이트 0xe9을 포함 바이트의 문자열을 UTF8로 해석하면 "연속 바이트"가 표시됩니다. 즉, 0xe9 다음에 올 Y 른 Y이트가 오기를 기대합니다. 유효한 바이트은 합법적 인 UTF8 문자를 구성하는 바이트 시퀀스를 의미합니다. 예 : 일부 유효한 계속이 바이트로

http://hexutf8.com/?q=e981a8

0xe9를 사용합니다.