fbpx

Ошибка с кодировкой при запуске приложения Flask на операционной системе Windows 7

531 просмотра
0
0 Комментариев

Установил Фреймворк Flask на Виндовс 7. При попытке запустить сервер вылетает ошибка UnicodeDecodeError:

‘utf-8’ codec can’t decode byte 0xc0 in position 0: invalid start byte.

При этом старался форматировать python-файл (скрипт) в программе Notepad++, менял кодировку на «ПРЕОБРАЗОВАТЬ В UTF-8 без DOM»

Запускаемый файл

И даже в начале кода прописывал строку # -*- coding: utf-8 -*-, но эта ошибка так и вылетает! Помогите решить эту задачу!

Запуск в командной строке


Добавить комментарий

2 Answers

Python Опубликовано 20.06.2019
0

Спасибо, jfs, добрый человек.

Добавить комментарий
0

coding: utf-8 указывает кодировку исходного кода.

Она не имеет никакого отношения к другим кодировкам, которые могут быть использованы во время исполнения, например, к кодировке, используемой для имени компьютера или к кодировке, используемой для отображения в Windows консоле или к кодировке, используемой notepad по умолчанию (три разных несвязанных значения).

В Питон 3, utf-8 является кодировкой по умолчанию для исходного кода поэтому объявление кодировки можно убрать. В исходном коде нет не ascii символов, поэтому декларацию кодировки можно убрать и в Питоне 2 в этом случае.

Код приложения выглядит нормально. Traceback указывает, что проблема в декодировании доменного имени.

Пример показывает, что в данном случае имя возможно начинается с русской буквы A, закодированной используя Windows кодировку (cp1251 для русской Винды по умолчанию):

>>> import unicodedata
>>> unicodedata.name(b'\xc0'.decode('cp1251'))
'CYRILLIC CAPITAL LETTER A'

Попытка декодировать, используя utf-8, естественно завершается ошибкой:

>>> b'\xc0'.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 0: invalid start byte

Если не рассматривать IDN-имена, то имя компьютера должно состоять только из ascii символов. Чтобы обойти проблему, можно попробовать переименовать машину.

Для проверки можно использовать

T:\> py -3 -mhttp.server

или

T:\> py -3 -mhttp.server --bind 127.0.0.1

Или же вызвать код напрямую в Питон-консоле (например, py -3 -midlelib):

>>> import socket
>>> socket.getfqdn()
'example.com'
>>> socket.gethostbyaddr('127.0.0.1')
('localhost', [], ['127.0.0.1'])

Для тестирования, можно явно host указать:

from flask import Flask
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello World!'
 
if __name__ == '__main__':
    app.run(host='127.0.0.1', debug=True)

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up