为什么我可以在127.0.0.2上运行python服务器但不在127.0.0.1上运行? UnicodeDecodeError错误

时间:2018-03-18 22:22:17

标签: python localhost windows-10 anaconda gethostbyaddr

我从讲师那里得到了一个简单的示例服务器文件。它对其他学生来说很好,但是当我试图运行它时,我得到了这个错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf8 in position 2: invalid start byte

错误指向代码中的这一行,其中服务器地址是(' 127.0.0.1',8080),另一个变量是" do_GET"和" do_POST"方法:

 httpd = HTTPServer(server_address, myHTTPServer_RequestHandler)

最终指出:

File "C:\Users\hetle\Anaconda3\envs\untitled\lib\socket.py", line 673, in getfqdn
hostname, aliases, ipaddrs = gethostbyaddr(name)

我正在使用带有Python 3.6版的Anaconda版本5.1。我也尝试过标准的Python解释器,但是同样的错误。我确保没有其他服务器同时运行。

我已经尝试关闭我知道在后台运行的所有程序,重新启动计算机,查看任务管理器(并尝试关闭某些任务),尝试了不同的目录(文档)。我甚至试过做一个新鲜的"安装Windows 10(但保留了我的文件)。

最奇怪的是,如果我将服务器的IP地址更改为127.0.0.2,它可以正常工作。是的,我通过电子邮件询问了学生助理(这导致什么都没有),并亲自问过讲师,他从未见过这样的错误。

我发现在ping 127.0.0.1和127.0.0.2时我得到了回复。

我不能使用127.0.0.2的原因是我有一个需要使用服务器(用于测试目的)的任务,这是使用烧瓶,我不能(据我所知)改变IP那个服务器。

我完全确定问题不在代码中(因为它适用于其他学生),并且考虑到我重新安装了Windows 10,删除了所有应用程序和程序,除了所有Windows设置都恢复为默认设置,我没有知道问题可能是什么。

127.0.0.1应该回复一个ping,而我没有做任何事情" fresh"安装Windows?如果没有,我怎样才能找到回复的内容?如果是,那可能是什么问题?我的硬件,低级别Windows文件或其他东西可能有问题吗?

def main():
    server_address = ('127.0.0.1', 8080)
    httpd = HTTPServer(server_address, myHTTPServer_RequestHandler)
    print("running server...")
    httpd.serve_forever()
Traceback (most recent call last):  
  File "C:/Users/hetle/Onedrive-UIS/OneDrive – Universitetet i Stavanger/DAT310 WebP/PyCharm-Projects/Exercises/Web-protocols/server.py", line 48, in <module>
    main()  
  File "C:/Users/hetle/Onedrive-UIS/OneDrive – Universitetet i Stavanger/DAT310 WebP/PyCharm-Projects/Exercises/Web-protocols/server.py", line 42, in main
    httpd = HTTPServer(server_address, myHTTPServer_RequestHandler)  
  File "C:\Users\hetle\Anaconda3\envs\untitled\lib\socketserver.py", line 453, in __init__
    self.server_bind()  
  File "C:\Users\hetle\Anaconda3\envs\untitled\lib\http\server.py", line 138, in server_bind
    self.server_name = socket.getfqdn(host)  
  File "C:\Users\hetle\Anaconda3\envs\untitled\lib\socket.py", line 673, in getfqdn
    hostname, aliases, ipaddrs = gethostbyaddr(name)   
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf8 in position 2: invalid start byte

2 个答案:

答案 0 :(得分:0)

我没有可用的Windows机器,所以我无法进行一些检查,但听起来您的计算机名称可能会有一些&#34;特殊的&#34;字符和Python不喜欢它。

修改
似乎确实存在一个与您的问题有关的错误: https://bugs.python.org/issue9377

我的建议是:

  • 在主机文件(C:\ Windows \ System32 \ Drivers \ etc \ hosts)中设置127.0.0.1的名称。
    确保名称仅包含ASCII(非扩展)字符。
  • 如果没有解决此问题,请尝试将主机名修改为仅使用ASCII字符的内容。

答案 1 :(得分:0)

您使用的是Python的Unicode

File "C:\Users\hetle\Anaconda3\envs\untitled\lib\socket.py"

此处\ U是一种Unicode,您已在 C:\ Users 中使用。所以python对待的是 Unicode ,所以只需将它转换为/你将摆脱这个问题。

File "C:/Users/hetle/Anaconda3/envs/untitled/lib/socket.py"

示例:&gt;&gt;

>>> s = u'La Pe\xf1a'         1
>>> print s                   2
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)
>>> print s.encode('latin-1') 3
La Peña

示例2:&gt;&gt;

>>> title                                       2
u'\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435'
>>> print title                                 3
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)
>>> convertedtitle = title.encode('koi8-r')     4
>>> convertedtitle
'\xf0\xd2\xc5\xc4\xc9\xd3\xcc\xcf\xd7\xc9\xc5'
>>> print convertedtitle                        5
Предисловие