티스토리 뷰
파이썬에는 php의 iconv같은 함수가 없어서 가끔 불편할 때가 있다. 에를 들어서 다음과 같은 경우가 있다. 나는 지금 pyaudio를 이용해서 현재 시스템에 장착되어 있는 오디오 장치에 뭐가 있는지 알아보려고 했다. 그래서 다음과 같은 소스를 사용했다.
1 2 3 4 5 6 7 8 9 | import pyaudio def getaudiodevices(): p = pyaudio.PyAudio() for i in range(p.get_device_count()): name = p.get_device_info_by_index(i).get('name') print(name) getaudiodevices(); | cs |
결과 :
1 | UnicodeEncodeError: 'cp949' codec can't encode character '\xbb' in position 10: illegal multibyte sequence | cs |
1 2 3 4 5 6 | Microsoft »ç¿îµå ¸ÅÆÛ - Input ¸¶ÀÌÅ©(Realtek High Definition ½ºÅ×·¹¿À ¹Í½º(Realtek High Defi Microsoft »ç¿îµå ¸ÅÆÛ - Output ½ºÇÇÄ¿(Realtek High Definition Realtek Digital Output(Realtek | cs |
이런 현상이 일어나는 이유는 마이크로소프트의 윈도우즈10은 cp-949 인코딩을 사용하고, 파이썬에서는 utf-8인코딩을 사용하기 때문이다. 이것을 해결하기 위해서는 cp-949를 utf-8인코딩으로 바꿔주어야 한다.
마침 minjaesong이라는 분이 만든 cp-949/utf-8 1대1 변환 테이블 github에 올라와 있었다.
이제 위 링크에서 다운로드 받은 다음에 Cp949ToUniTable.py 파일만 따로 떼준 다음에 프로그램 소스와 같은 폴더에 넣어준다. cp-949를 utf-8로 변환시켜주는 소스는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import pyaudio import Cp949ToUniTable def getaudiodevices(): p = pyaudio.PyAudio() for i in range(p.get_device_count()): name = p.get_device_info_by_index(i).get('name') i = 0 while True: if(i == len(name)): break if(Cp949ToUniTable.uni_conv_table[ord(name[i])] == 'LEAD'): print(chr(Cp949ToUniTable.uni_conv_table[ord(name[i])*0x100+ord(name[i+1])]),end="") i+=1 else: print(chr(Cp949ToUniTable.uni_conv_table[ord(name[i])]),end="") i+=1 print("") getaudiodevices(); | cs |
결과:
1 2 3 4 5 6 | 0번 : Microsoft 사운드 매퍼 - Input 1번 : 마이크(Realtek High Definition 2번 : 스테레오 믹스(Realtek High Defi 3번 : Microsoft 사운드 매퍼 - Output 4번 : 스피커(Realtek High Definition 5번 : Realtek Digital Output(Realtek | cs |
이제 한글이 완전히 출력되는 것을 볼 수 있다. 문자열이 잘리는 것은 아마 pyaudio 자체의 문제인 것 같다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로그래밍
- 발전기 회로
- 게임 만들기
- 자바스크립트
- 인터프리터
- 로지심
- 디지털논리회로
- 크롬
- Ham
- 아두이노
- 책상 배치
- 코딩
- SDR
- 확장프로그램
- 청소년 필독서
- 컴퓨터 설계
- 무선 마우스
- phaser
- 발전기ㅣ
- logisim
- 신호 수신
- CPU 설계
- 난해언어
- TG-M6600G
- 물리 필독서
- 브레인퍽
- 아마추어무선
- 과학상자
- WEBSDR
- 게임 제작
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함