【问题标题】:Why can I run a python server on 127.0.0.2 but not on 127.0.0.1? UnicodeDecodeError [duplicate]为什么我可以在 127.0.0.2 上运行 python 服务器,但不能在 127.0.0.1 上运行? UnicodeDecodeError [重复]
【发布时间】:2018-08-27 10:47:20
【问题描述】:

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

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)

我正在使用 Anaconda 5.1 版和 Python 3.6 版。我也尝试过标准的 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 设置恢复为默认值之外,我没有知道问题可能是什么。

在“全新”安装 Windows 后我是否应该回复 ping,而无需我做任何事情?如果没有,我怎样才能找到回复的内容?如果是,可能是什么问题?我的硬件、低级别的 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

【问题讨论】:

  • 如果您在浏览器中转到127.0.0.1,您是否看到其他应用程序在那里运行,例如Windows IIS?

标签: python localhost windows-10 anaconda gethostbyaddr


【解决方案1】:

我没有可用的 Windows 机器,因此无法进行一些检查,但听起来您的计算机名称可能包含一些“特殊”字符,而 Python 不喜欢它。

编辑:
似乎确实存在与您的问题有关的现有错误: https://bugs.python.org/issue9377

我的建议是:

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

【讨论】:

  • 更改我的电脑名称修复它!非常感谢!
【解决方案2】:

你正在使用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"

示例:>>

>>> 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:>>

>>> 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
Предисловие

【讨论】:

    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2012-07-24
    • 2011-04-24
    • 2019-03-07
    相关资源
    最近更新 更多