Почему я могу запустить сервер 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
Предисловие
Другие вопросы по тегам