1. 程式人生 > >Django的坑

Django的坑

eba utf-8 hostname FQ name utf sockets int http

在pycharm中運行代碼示例是提示編碼錯誤代碼如下:

#!/usr/bin/env python
# -*-coding:utf-8-*-

from wsgiref.simple_server import make_server


def application(environ, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])
    return [b‘<h1>Hello, web!</h1>‘]


httpd = make_server(‘‘, 8080, application)
print("Serving http on port 80000")
httpd.serve_forever()

  提示錯誤如下:

技術分享圖片

Traceback (most recent call last):
  File "D:/學習筆記/python/練習目錄/前端/練習.py", line 24, in <module>
    httpd = make_server(‘‘, 8080, application)
  File "C:\python\python36\lib\wsgiref\simple_server.py", line 153, in make_server
    server = server_class((host, port), handler_class)
  File "C:\python\python36\lib\socketserver.py", line 453, in __init__
    self.server_bind()
  File "C:\python\python36\lib\wsgiref\simple_server.py", line 50, in server_bind
    HTTPServer.server_bind(self)
  File "C:\python\python36\lib\http\server.py", line 138, in server_bind
    self.server_name = socket.getfqdn(host)
  File "C:\python\python36\lib\socket.py", line 673, in getfqdn
    hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xcb in position 0: invalid continuation byte

  

反正就是編碼錯誤:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd2 in position 0: invalid continuation byte

Python3默認的是utf-8編碼,中國程序員最苦逼的地方就是中文,程序遇到中文極大可能性會報錯。出現編碼問題,說明解碼方式不對,可能是utf8解碼中文出錯,接著確認哪裏出了問題。錯誤提示發現是 hostname, aliases, ipaddrs = gethostbyaddr(name)這句代碼出了錯誤,這句代碼是個函數,函數有參數,那先從參數入手,參數是name,那可能name是個中文,但是我的程序命名都是英文,那應該不是我的程序命名問題。經研究錯誤提示發現gethostbyaddr()函數是中文翻譯就是獲取主機地址,而傳參是名字,那麽name傳入的就是主機名,也就是我們電腦名。我的電腦名是中文,是不是改成英文就可以了,經測試發現的確是主機中文名導致的

改完主機名之後代碼運行如下:

技術分享圖片

問題,改成英文名即可順利啟動本地服務器。

Django的坑