UnicodeDecodeError при запуске приложения под Windows с помощью Pycharm - PullRequest
2 голосов
/ 21 апреля 2019

Проблема в том, что при попытке запустить приложение (app.py) я получаю следующую ошибку:

UnicodeDecodeError: кодек «utf-8» не может декодировать байт 0xb3 в позиции 5: недействительноначальный байт

Весь файл app.py:

# -*- coding: utf-8 -*-
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return 'Hello World'

if __name__ == "__main__":
    app.run(host='127.0.0.1')

Я где-то читал здесь о stackoverflow, что это может помочь:

# -*- coding: utf-8 -*-  

, но это не меняетсячто-нибудь.Затем я изменил с

app.run()

на

app.run(host='127.0.0.1')

, но это тоже не работает.

Я запускаю приложение под Windows, поэтому я устанавливаю env.переменная следующим образом:

set FLASK_APP = app.py

но независимо от того, запускаю ли я это в pycharm или в windows cmd с

flask run

, я получаю одну и ту же ошибку каждый раз.

Fullкод ошибки:

Traceback (most recent call last):
  File "C:/Users/Michał/Desktop/Michał/Zadanie/Flask_Blog/app.py", 
line 11, in <module>
    app.run(host='127.0.0.1')
  File "C:\Users\Michał\AppData\Local\Programs\Python\Python36- 
32\lib\site-packages\flask\app.py", line 943, in run
    run_simple(host, port, self, **options)
  File "C:\Users\Michał\AppData\Local\Programs\Python\Python36- 
32\lib\site-packages\werkzeug\serving.py", line 990, in run_simple
    inner()
  File "C:\Users\Michał\AppData\Local\Programs\Python\Python36- 
32\lib\site-packages\werkzeug\serving.py", line 943, in inner
    fd=fd,
  File "C:\Users\Michał\AppData\Local\Programs\Python\Python36- 
32\lib\site-packages\werkzeug\serving.py", line 786, in make_server
    host, port, app, request_handler, passthrough_errors, ssl_context, 
fd=fd
  File "C:\Users\Michał\AppData\Local\Programs\Python\Python36- 
32\lib\site-packages\werkzeug\serving.py", line 679, in __init__
    HTTPServer.__init__(self, server_address, handler)
  File "C:\Users\Michał\AppData\Local\Programs\Python\Python36- 
32\lib\socketserver.py", line 453, in __init__
    self.server_bind()
  File "C:\Users\Michał\AppData\Local\Programs\Python\Python36- 
32\lib\http\server.py", line 138, in server_bind
    self.server_name = socket.getfqdn(host)
  File "C:\Users\Michał\AppData\Local\Programs\Python\Python36- 
32\lib\socket.py", line 673, in getfqdn
    hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 5: 
invalid start byte

Редактировать (обновить) Я изменил расположение python.exe и местоположение проекта, и ошибка все еще существует:

Traceback (most recent call last):
  File "C:/Users/Public/Projekt/main.py", line 11, in <module>
    app.run(host='127.0.0.1')
  File "C:\Users\Public\Python\Python36-32\lib\site- 
packages\flask\app.py", line 943, in run
    run_simple(host, port, self, **options)
  File "C:\Users\Public\Python\Python36-32\lib\site-
packages\werkzeug\serving.py", line 990, in run_simple
    inner()
  File "C:\Users\Public\Python\Python36-32\lib\site-packages\werkzeug\serving.py", line 943, in inner
    fd=fd,
  File "C:\Users\Public\Python\Python36-32\lib\site-packages\werkzeug\serving.py", line 786, in make_server
    host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd
  File "C:\Users\Public\Python\Python36-32\lib\site-packages\werkzeug\serving.py", line 679, in __init__
    HTTPServer.__init__(self, server_address, handler)
  File "C:\Users\Public\Python\Python36-32\lib\socketserver.py", line 453, in __init__
    self.server_bind()
  File "C:\Users\Public\Python\Python36-32\lib\http\server.py", line 138, in server_bind
    self.server_name = socket.getfqdn(host)
  File "C:\Users\Public\Python\Python36-32\lib\socket.py", line 673, in getfqdn
    hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 5: invalid start byte

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Метод gethostbyaddr получит имя вашего компьютера, если он не английский, cmd приведет к этой ошибке.

Вам необходимо полностью переименовать компьютер Windows на английском языке и перезагрузить компьютер

0 голосов
/ 21 апреля 2019

Проблема в родной букве ł (вероятно, в имени Michał), которая имеет код 0xb3, но в Window-1250, а не UTF-8.

Может быть, у вас есть эта буква не только в имени папки, но и в имени хоста (имени компьютера), а затем у скрипта возникают проблемы при попытке получить это имя в

hostname, aliases, ipaddrs = gethostbyaddr(name)

Вы можете увидеть это сообщение об ошибке в строке.

Может быть, если вы измените имя хоста в настройках Windows, это будет работать.


Я не использую Windows, но когда я использовал Windows (и DOS), всегда было хорошее правило: не используйте в имени файла / папки собственные (польские) буквы (и пробелы). То же самое может быть с именем хоста.


Windows может использовать три разные кодировки (кодовая страница) - Window-1250 (CP-1250) для имен файлов, CP-852 для текста в консоли и UTF-8 в вашем скрипте. Иногда также LATIN2 (ISO-8859-2) в старых файлах HTML.

См. Изображение, которое полирует кодовые страницы (кодировки) на странице Python Unicode - декодировать и кодировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...