2014-01-09 4 views
-1

무작위 위키 페이지에 액세스할지 여부를 묻는 임의의 위키 페이지 생성기를 만들려고합니다. 그러나 이러한 페이지 중 일부는 악센트 부호가있는 문자가 있으며 코드를 실행할 때이를 git bash에 표시하려고합니다. cmd 모듈을 사용하여 사용자 입력을 허용합니다. 바로 지금, 내가 제목을 표시하는 방식은 작동 시간에파이썬 인터프리터에서 악센트 부호가있는 문자를 표시 할 수있는 방법이 있습니까?

r_site = requests.get("http://en.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=10&format=json") 
print(json.loads(r_site.text)["query"]["random"][0]["title"].encode("utf-8")) 

을 사용하지만 악센트 문자가 나타날 때마다 25 \ XE2 \ X80 \ x9399처럼 보여줍니다.

모든 대안이나 대안이 필요합니까? 감사. "일부 문자열이"다음 중 하나가 될 수있는

+0

당신의 환경을 유니 코드 문자를 표시하도록 설정해야합니다. 기본적으로 git bash는 그렇게하지 않습니다. – MattDMo

+0

은'json.loads (r_site.text)'대신'r_site.json()'을 사용합니다. Drop'.encode ('utf-8')' – jfs

+0

둘 사이에 차이점이 있습니까? - 방금 시도해 보니 악센트 부호가있는 문자가 나타나면 charmap 코덱에서 문자 오류를 인코딩 할 수 없습니다. – user3084415

답변

0
import sys 
.encode(sys.stdout.encoding, errors="some string")

로 인코딩을 변경

:

  • '엄격한'(기본값) - 인쇄 할 수없는 문자가있을 때 UnicodeError를 제기 접미사
  • '무시'- 인코딩 할 수없는 문자를 인쇄하지 마십시오.
  • '바꾸기'- 인코딩 할 수없는 문자를?
  • 'xmlcharrefreplace'- XML ​​이스케이프 시퀀스
  • 'backslashreplace'와 unencodable 문자를 대체 -

그래서 아니, 표시하는 문자를 볼 수있는 방법이 없습니다 탈출 유니 코드 코드 포인트 값 unencodable 문자를 대체 터미널의 로켈이 지원하지 않는 경우 그러나 이러한 옵션을 사용하면 대신 수행 할 작업을 선택할 수 있습니다.

자세한 내용은 here을 확인하십시오.

+0

이러한 문자를 가장 많이 사용하는 단말기를 사용하고 계십니까? – user3084415

+0

@ abarnert의 대답을 확인하십시오. 만약 당신이 파이썬 3.x를 사용하고 있다고 가정하고 올바른 것이라면 터미널은 non-isue입니다 (utf-8을 사용하지 않는 cmd cmd를 사용하지 않는다면) –

+0

나는 자식 bash는 또한 msysgit 시도 - 두 터미널은 여전히 ​​문제가있다. – user3084415

0

3.x 스타일의 print 함수 호출을 작성한다고 가정하면이 코드는 Python 3.x라고 가정합니다.

파이썬 3.x에서 어떤 객체도 str을 호출 한 다음 sys.stdout.encoding으로 인코딩하여 인쇄합니다. 같은

>>> print('abcé') 
abcé 

을하지만 당신은 그것을 bytes 객체를 전달하는 경우 : 당신이 그것을 유니 코드 문자열을 전달하면

그래서, 그냥 작동 (유니 코드를 처리 할 수있는 터미널을 가정하고, 파이썬은 제대로 sys.stdout.encoding 짐작했다) 당신이 .encode('utf-8')를 호출 돌아 왔을 사람이 같은 str 기능 형식이 :

>>> print('abcé'.encode('utf-8')) 
b'abc\xce\xa9' 

이유는 무엇입니까? bytes 개체는 문자열이 아니기 때문에 bytes 개체가 인쇄되는 방식입니다. 인쇄 할 수없는 모든 ASCII 바이트의 접두사, 따옴표 및 백 슬래시 이스케이프가 b입니다.

해결 방법은 encode('utf-8')을 호출하지 않는 것입니다.

대부분의 혼동은 Python 2의 코드를 읽는 것입니다.x, 여기서 bytesstr은 같은 유형이고 print이 실제로 원하는 유형이며 Python 3.x에서 사용하려고했습니다.