2010-01-03 5 views
2

익명 파이프를 사용하여 모든 stdout을 캡처 한 다음 stderr를 사용하여 richedit으로 인쇄합니다. wsprintf를 사용할 때는 괜찮지 만, python은 멀티 바이트 문자를 사용하여 실제로 나를 귀찮게합니다. 어떻게 이러한 모든 출력을 유니 코드로 변환 할 수 있습니까?파이썬 및 유니 코드 stderr

UPDATE 2010-01-03 :

가 답장을 보내 주셔서 감사하지만,이 str.encode()는 오류가 py_runxxx() 중에있는 경우, 내 리디렉션 표준 오류가 오류를 캡처, print xxx 물건 일 것 멀티 바이트 문자열의 메시지, 그래서 거기에 파이썬 출력을 유니 코드 방식으로 메시지를 만들 수 있습니까? 그리고 this post에 가능한 해결책이있는 것 같습니다.

나중에 사용해 보겠습니다.

답변

0

파이썬에서 유니 코드로 문자열을 유니 코드 (예 : u'Hello World')로 표시하거나 모든 문자열에있는 encode() 메서드를 사용하여 유니 코드로 작업 할 수 있습니다.

예 : aStringVariable, 당신은 유니 코드 문자열을 가지고 가정 :

aStringVariable.encode('utf-8') 

이 UTF-8로 변환됩니다. 'utf-16'은 UTF-16을주고 'ascii'는 일반 ASCII 문자열로 변환합니다. 자세한 내용은

은 다음을 참조하십시오

+0

1. 내장 이름 (이 경우 str())을 섀도 잉하는 것은 나쁜 습관입니다. 2.'.encode()'는 유니 코드 문자열에서 호출되어야하며 바이트 문자열에서는 호출되지 않아야합니다. – jfs

+0

그것은 변수 이름에 대한 나쁜 선택이었습니다. 나는 그것을 더 명백한 것으로 바꾸었다. –

-1

wsprintf?

이것은 파이썬 질문이 아닌 "C/C++"질문 인 것 같습니다.

파이썬 인터프리터는 유니 코드 (또는 "와이드") 문자열이 아닌 stdout/stderr에 항상 bytestrings을 씁니다. 이는 파이썬이 현재의 인코딩 (아마도 sys.getdefaultencoding())을 사용하여 모든 유니 코드 데이터를 먼저 인코딩한다는 것을 의미합니다.

stdout/stderr에서 유니 코드 데이터로 가져 오려면 올바른 인코딩을 사용하여 직접 디코딩해야합니다.

좋아하는 C/C++ 라이브러리에는 확실하게 필요한 작업이 있습니다.

9

먼저 Windows 콘솔에서 유니 코드를 완전히 지원하지 않을 수 있습니다.

아래 예와 stdoutstderr은 UTF-8을 사용 파이썬 출력을한다. 원하는 경우 다른 인코딩으로 변경할 수 있습니다.

#!/usr/bin/python 
# -*- coding: UTF-8 -*- 

import codecs, sys 

reload(sys) 
sys.setdefaultencoding('utf-8') 

print sys.getdefaultencoding() 

sys.stdout = codecs.getwriter('utf8')(sys.stdout) 
sys.stderr = codecs.getwriter('utf8')(sys.stderr) 

print "This is an Е乂αmp١ȅ testing Unicode support using Arabic, Latin, Cyrillic, Greek, Hebrew and CJK code points." 
+0

니스! 제 경우에는 stdout과 stderr을 교체하는 것이 필요하지 않았습니다. – flocki

관련 문제