Python 使用Pycharm在Windows下启动应用程序时出现UnicodeDecodeError

Python 使用Pycharm在Windows下启动应用程序时出现UnicodeDecodeError,python,python-3.x,flask,Python,Python 3.x,Flask,问题是当我尝试启动应用程序(app.py)时 我得到以下错误: UnicodeDecodeError:“utf-8”编解码器无法解码位置5中的字节0xb3:无效的开始字节 整个文件app.py: # -*- coding: utf-8 -*- from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return 'Hello World' if __name__ == "__main__"

问题是当我尝试启动应用程序(app.py)时 我得到以下错误:

UnicodeDecodeError:“utf-8”编解码器无法解码位置5中的字节0xb3:无效的开始字节

整个文件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()

但它也不起作用

我在windows下启动应用程序,所以我设置了环境。变量如下:

set FLASK_APP = app.py
但不管我是在pycharm中还是在windows cmd中使用

flask run
我每次都会犯同样的错误

完整错误代码:

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
回溯(最近一次呼叫最后一次):
文件“C:/Users/Michał/Desktop/Michał/Zadanie/Flask_Blog/app.py”,
第11行,在
app.run(host='127.0.0.1')
文件“C:\Users\Michał\AppData\Local\Programs\Python\Python36-
32\lib\site packages\flask\app.py”,第943行,运行中
运行简单(主机、端口、自身,**选项)
文件“C:\Users\Michał\AppData\Local\Programs\Python\Python36-
32\lib\site packages\werkzeug\serving.py“,第990行,运行时\u simple
内()
文件“C:\Users\Michał\AppData\Local\Programs\Python\Python36-
32\lib\site packages\werkzeug\serving.py”,第943行,内部
fd=fd,
文件“C:\Users\Michał\AppData\Local\Programs\Python\Python36-
32\lib\site packages\werkzeug\serving.py”,第786行,在make_服务器中
主机、端口、应用程序、请求处理程序、直通错误、ssl上下文、,
fd=fd
文件“C:\Users\Michał\AppData\Local\Programs\Python\Python36-
32\lib\site packages\werkzeug\serving.py”,第679行,在初始化中__
HTTPServer.\uuuuu init\uuuuuuuuuu(self,服务器地址,处理程序)
文件“C:\Users\Michał\AppData\Local\Programs\Python\Python36-
32\lib\socketserver.py”,第453行,在__
self.server_bind()
文件“C:\Users\Michał\AppData\Local\Programs\Python\Python36-
32\lib\http\server.py”,服务器绑定中的第138行
self.server_name=socket.getfqdn(主机)
文件“C:\Users\Michał\AppData\Local\Programs\Python\Python36-
32\lib\socket.py”,第673行,在getfqdn中
主机名、别名、IPADRS=gethostbyaddr(名称)
UnicodeDecodeError:“utf-8”编解码器无法解码位置5中的字节0xb3:
无效的起始字节
编辑(更新)我更改了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
回溯(最近一次呼叫最后一次):
文件“C:/Users/Public/Projekt/main.py”,第11行,在
app.run(host='127.0.0.1')
文件“C:\Users\Public\Python\Python36-32\lib\site-
packages\flask\app.py”,第943行,运行中
运行简单(主机、端口、自身,**选项)
文件“C:\Users\Public\Python\Python36-32\lib\site-
packages\werkzeug\serving.py”,第990行,运行方式
内()
文件“C:\Users\Public\Python\Python36-32\lib\site packages\werkzeug\serving.py”,第943行,在内部
fd=fd,
文件“C:\Users\Public\Python\Python36-32\lib\site packages\werkzeug\serving.py”,第786行,位于make_服务器中
主机、端口、应用程序、请求处理程序、传递错误、ssl上下文、fd=fd
文件“C:\Users\Public\Python\Python36-32\lib\site packages\werkzeug\serving.py”,第679行,在\uuu init中__
HTTPServer.\uuuuu init\uuuuuuuuuu(self,服务器地址,处理程序)
文件“C:\Users\Public\Python\Python36-32\lib\socketserver.py”,第453行,在\uu init中__
self.server_bind()
服务器绑定中的文件“C:\Users\Public\Python\Python36-32\lib\http\server.py”,第138行
self.server_name=socket.getfqdn(主机)
文件“C:\Users\Public\Python\Python36-32\lib\socket.py”,第673行,在getfqdn中
主机名、别名、IPADRS=gethostbyaddr(名称)
UnicodeDecodeError:“utf-8”编解码器无法解码位置5中的字节0xb3:无效的开始字节

问题是本机字母
ł
(可能是名字
Michał
),它有代码
0xb3
,但在
Window-1250
中,而不是
UTF-8

可能您不仅在文件夹名中有此字母,而且在主机名(计算机名)中也有此字母,然后脚本在尝试获取此名称时出现问题

hostname, aliases, ipaddrs = gethostbyaddr(name)
您可以看到此行错误消息

如果您在Windows的设置中更改主机名,它可能会工作


我不使用Windows,但当我使用Windows(和DOS)时,总有一条好规则:不要在文件/文件夹名中使用本机(波兰语)字母(和空格)。主机名也是如此


Windows可能使用三种不同的编码(代码页)Window-1250CP-1250)作为文件名,CP-852作为控制台中的文本,以及脚本中的UTF-8。有时在旧的HTML文件中也会出现
LATIN2
ISO-8859-2


请参阅:image which polish code pages(encodings)on page

方法
gethostbyaddr
将获取您的计算机名,如果不是英文,cmd将导致此错误


您需要完全用英语重命名您的windows计算机,并在所有时间内重新启动计算机。这是一条很好的规则:不要在文件/文件夹名中使用空格和本机(波兰语)字母。Code0xb3是编码中的字母Michał(PL:lepiej nie używaćpolskich lill(i spacji)w nazwach plików i katalog w-0xb3 to kod literył)噢,不。。。我必须重命名计算机用户名吗?或者有其他解决办法吗orename主机名-应该没问题。我认为您不必更改用户名。不幸的是,它没有解决问题(PL:Niestty,ale给nie pomogło rozwiązać的问题):(我添加了“更新”在我的帖子中,您的问题不是位置,而是主机名—计算机的名称。在Linux上,我可以使用commadn
HOSTNAME
在控制台中看到我的主机名。在Windows上,应该是可以在控制台/terminal/cmd.exe中运行的同一命令测试此命令:
import socket;socket.gethostbyname('Michał')
hostname, aliases, ipaddrs = gethostbyaddr(name)