Python 使用Pycharm在Windows下启动应用程序时出现UnicodeDecodeError
问题是当我尝试启动应用程序(app.py)时 我得到以下错误: UnicodeDecodeError:“utf-8”编解码器无法解码位置5中的字节0xb3:无效的开始字节 整个文件app.py: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__"
# -*- 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-1250
(CP-1250
)作为文件名,CP-852
作为控制台中的文本,以及脚本中的UTF-8
。有时在旧的HTML文件中也会出现LATIN2
(ISO-8859-2
)
请参阅:image which polish code pages(encodings)on page方法
gethostbyaddr
将获取您的计算机名,如果不是英文,cmd将导致此错误
您需要完全用英语重命名您的windows计算机,并在所有时间内重新启动计算机。这是一条很好的规则:不要在文件/文件夹名中使用空格和本机(波兰语)字母。Code
0xb3
是编码中的字母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上,我可以使用commadnHOSTNAME
在控制台中看到我的主机名。在Windows上,应该是可以在控制台/terminal/cmd.exe中运行的同一命令测试此命令:import socket;socket.gethostbyname('Michał')
hostname, aliases, ipaddrs = gethostbyaddr(name)