为什么我可以 运行 python 服务器位于 127.0.0.2 而不是 127.0.0.1? Unicode解码错误
Why can I run a python server on 127.0.0.2 but not on 127.0.0.1? UnicodeDecodeError
我从我的讲师那里得到了一个简单的示例服务器文件。它对其他学生来说工作正常,但是当我尝试 运行 时,我收到此错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf8 in position 2: invalid start byte
错误指向代码中的这一行,其中服务器地址是 ('127.0.0.1', 8080),另一个变量是 class with "do_GET" and "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 解释器,但有同样的错误。而且我确保没有其他服务器同时 运行ning。
我已经尝试关闭所有我知道 运行 在后台运行的程序,重新启动计算机,查看任务管理器(并尝试关闭一些任务),尝试不同的目录(文档)。我什至尝试过 "fresh" 安装 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 是否应该在 "fresh" 安装 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
我没有可用的 windows 机器,所以我无法进行一些检查,但听起来您的计算机名称可能包含一些 "special" 个字符,而 Python 是不喜欢它。
编辑:
似乎确实存在一个与您的问题有关的现有错误:
https://bugs.python.org/issue9377
我的建议是:
- 在主机文件中为 127.0.0.1 设置一个名称 (C:\Windows\System32\Drivers\etc\hosts)。
确保名称仅包含 ASCII (non-extended) 字符。
- 如果这不能解决问题,请尝试将您的主机名也修改为仅使用 ASCII 字符的名称。
您正在使用 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
例二:>>
>>> 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
Предисловие
我从我的讲师那里得到了一个简单的示例服务器文件。它对其他学生来说工作正常,但是当我尝试 运行 时,我收到此错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf8 in position 2: invalid start byte
错误指向代码中的这一行,其中服务器地址是 ('127.0.0.1', 8080),另一个变量是 class with "do_GET" and "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 解释器,但有同样的错误。而且我确保没有其他服务器同时 运行ning。
我已经尝试关闭所有我知道 运行 在后台运行的程序,重新启动计算机,查看任务管理器(并尝试关闭一些任务),尝试不同的目录(文档)。我什至尝试过 "fresh" 安装 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 是否应该在 "fresh" 安装 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
我没有可用的 windows 机器,所以我无法进行一些检查,但听起来您的计算机名称可能包含一些 "special" 个字符,而 Python 是不喜欢它。
编辑:
似乎确实存在一个与您的问题有关的现有错误:
https://bugs.python.org/issue9377
我的建议是:
- 在主机文件中为 127.0.0.1 设置一个名称 (C:\Windows\System32\Drivers\etc\hosts)。
确保名称仅包含 ASCII (non-extended) 字符。 - 如果这不能解决问题,请尝试将您的主机名也修改为仅使用 ASCII 字符的名称。
您正在使用 python
的 UnicodeFile "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
例二:>>
>>> 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
Предисловие