Python中在Windows 10下新建Flask项目运行报错UnicodeDecodeError的问题如何解决

配置好环境学习 flask,直接运行出现

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte  

报错问题 ,看完报错提示一脸懵逼,然后以为是环境没配好,使用

conda create -n your_env_name python=3.6

创建新的环境还是如此,百度 Google 无果后,于是想请求下大家,应该如何解决?

代码部分:

from flask import Flask

app = Flask(name)

@app.route(’/’) def hello_world(): return ‘Hello World!’

if name == ‘main’: app.run()

报错内容:

D:\ProgramData\Anaconda3\python.exe D:/Work/flask_demo/flask_demo.py
 * Serving Flask app "flask_demo" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "D:/Work/flask_demo/flask_demo.py", line 12, in <module>
    app.run()
  File "D:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 943, in run
    run_simple(host, port, self, **options)
  File "D:\ProgramData\Anaconda3\lib\site-packages\werkzeug\serving.py", line 814, in run_simple
    inner()
  File "D:\ProgramData\Anaconda3\lib\site-packages\werkzeug\serving.py", line 774, in inner
    fd=fd)
  File "D:\ProgramData\Anaconda3\lib\site-packages\werkzeug\serving.py", line 660, in make_server
    passthrough_errors, ssl_context, fd=fd)
  File "D:\ProgramData\Anaconda3\lib\site-packages\werkzeug\serving.py", line 577, in __init__
    self.address_family), handler)
  File "D:\ProgramData\Anaconda3\lib\socketserver.py", line 453, in __init__
    self.server_bind()
  File "D:\ProgramData\Anaconda3\lib\http\server.py", line 138, in server_bind
    self.server_name = socket.getfqdn(host)
  File "D:\ProgramData\Anaconda3\lib\socket.py", line 673, in getfqdn
    hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte

Python中在Windows 10下新建Flask项目运行报错UnicodeDecodeError的问题如何解决

5 回复

encoding: utf-8
文件头加上这段试试


这个问题通常是因为Windows的默认编码(cp936/gbk)和项目文件的实际编码(通常是UTF-8)不匹配导致的。Flask在读取模板或配置文件时,如果遇到非ASCII字符就会报错。

解决方案:

  1. 检查文件编码:确保你的.py.html和所有配置文件都保存为UTF-8编码。在VS Code或PyCharm等编辑器中,可以在右下角看到当前文件的编码。

  2. 添加编码声明:在Python文件开头添加:

# -*- coding: utf-8 -*-
  1. 设置环境变量(最有效的解决方法):
import os
import sys
import locale

# 在app.py最开头添加这些代码
if sys.platform == 'win32':
    # 设置控制台编码为UTF-8
    sys.stdout.reconfigure(encoding='utf-8')
    sys.stderr.reconfigure(encoding='utf-8')
    
    # 设置系统区域设置
    os.environ['PYTHONIOENCODING'] = 'utf-8'
    os.environ['PYTHONUTF8'] = '1'
    
    # 对于Python 3.7+
    if hasattr(sys, '_enablelegacywindowsfsencoding'):
        sys._enablelegacywindowsfsencoding = False
  1. 修改Flask应用配置
from flask import Flask

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False  # 让JSON支持中文
app.config['ENCODING'] = 'utf-8'
  1. 如果问题出现在模板文件,在render_template时指定编码:
@app.route('/')
def index():
    with open('templates/index.html', 'r', encoding='utf-8') as f:
        content = f.read()
    return content

实际案例: 如果你的错误信息类似:

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 20

这明确表示Python试图用gbk编码读取UTF-8文件。按照上面的方法3设置环境变量通常能直接解决问题。

快速测试:创建一个最简单的测试文件test_encoding.py

# -*- coding: utf-8 -*-
import os
os.environ['PYTHONUTF8'] = '1'

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "你好,世界!"

if __name__ == '__main__':
    app.run(debug=True)

运行这个文件,如果不再报错,说明编码问题已解决。

总结:设置PYTHONUTF8=1环境变量是最彻底的解决方案。

谢谢你的解答,不过还是不行。。。

<br>import sys<br>reload(sys)<br>sys.setdefaultencoding('utf-8')<br>
再试试这段,也是放在头部。

如果不行的话,看看你计算机名是不是中文的,改成英文试试。

!!!的确是计算机名字为中文的问题!修改就好了,多谢,多谢!!!

回到顶部