웹 페이지를 잡고 프록시처럼 작동하는 웹 브라우저에 HTML 파일을 표시하는 간단한 Python CGI 스크립트를 작성하고 있습니다. 명령 줄에서 실행할 때Python urllib.request 및 utf8 디코딩 질문
#!/usr/bin/env python3.0
import urllib.request
site = "http://reddit.com/"
site = urllib.request.urlopen(site)
site = site.read()
site = site.decode('utf8')
print("Content-type: text/html\n\n")
print(site)
이 스크립트는 잘 작동하지만 웹 브라우저를 볼 수에 도달하면 빈 페이지를 보여줍니다 여기에 스크립트입니다. 다음은 Apache의 error_log에 나타나는 오류입니다.
Traceback (most recent call last):
File "/home/public/projects/proxy/script.cgi", line 11, in <module>
print(site)
File "/usr/local/lib/python3.0/io.py", line 1491, in write
b = encoder.encode(s)
File "/usr/local/lib/python3.0/encodings/ascii.py", line 22, in encode
return codecs.ascii_encode(input, self.errors)[0]
UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 33777: ordinal not in range(128)
는이 시도.무엇보다도 인위적인 태그 앞에 "b'00004000 \ r \ n"이 인쇄됩니다. 그 일을해야합니까? 내가 잘못 본 것이 아니라면, 그것이 바이트 코드라는 것을 의미합니까? –
@Corey Farwell : 아, 파이썬 3을 사용하고 있습니다. 내 잘못이야. 예, 인쇄 할 수 없으면 표준 출력에 써야합니다. 업데이트됩니다. –
sys.stdout.buffer.write()는 Strings을 좋아하지 않으므로 먼저 Content-type을 utf8로 인코딩 한 다음 두 가지를 모두 써야합니다. 거의 모든 것은 '00004000'이 있고 마지막 줄은 '00000000'인 웹 페이지의 몇 줄 (맨 처음 줄 포함)을 제외하고 작동합니다. 이 문제를 해결할 더 좋은 방법이 없을까요? stdout을 사용하는 것만으로도 해킹 된 것 같은 기분이 듭니다. wsgi로이 작업을보다 쉽게 할 수 있습니까? –