Почему я могу запустить сервер Python на 127.0.0.2, а не на 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), а другая переменная - это класс с методами "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, он будет работать нормально. И да, я попросил студенческого помощника по электронной почте (что ни к чему не привело) и лично спросил лектора, и он никогда не видел такой ошибки.
Я узнал, что я получаю ответ при пинге 127.0.0.1, а также от 127.0.0.2.
Причина, по которой я не могу просто использовать 127.0.0.2, заключается в том, что у меня есть назначение, которое требует использования сервера (для целей тестирования), использующего флешку, и я не могу (насколько мне известно) изменить IP-адрес этого сервера.
Я полностью уверен, что проблема не в коде (как это работает для других студентов), и, учитывая, что я переустановил Windows 10, которая удалила все приложения и программы, в дополнение ко всем настройкам Windows, возвращенным к настройкам по умолчанию, я понятия не имею, что проблема может быть.
Должен ли 127.0.0.1 отвечать на пинг, без каких-либо действий после "новой" установки 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 ответа
У меня нет машины с Windows, поэтому я не могу выполнить некоторые проверки, но звучит так, будто имя вашего компьютера может содержать некоторые "специальные" символы, и Python ему не нравится.
Редактировать:
Кажется, действительно существует ошибка, которая касается вашей проблемы: https://bugs.python.org/issue9377
Мое предложение:
- Установите имя для 127.0.0.1 в вашем файле hosts (C:\Windows\System32\Drivers\etc\hosts).
Убедитесь, что имя содержит только символы ASCII (не расширенные). - Если это не решит проблему, попробуйте изменить имя вашего хоста так, чтобы оно использовало только символы ASCII.
Вы используете Unicode из Python
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
Предисловие