兼容UTF-8编码

自动转换UTF-8编码的.env文件为GBK编码
允许用户在根目录配置.env文件
(优先级:.env大于data/.env)
This commit is contained in:
essesoul
2023-01-03 21:10:38 +08:00
parent 08c6368cc6
commit 3cbb884dda
4 changed files with 39 additions and 2 deletions
+2
View File
@@ -4,6 +4,7 @@ import asyncio
from pathlib import Path
import os
try:
import chardet
from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks
from starlette.requests import Request
from starlette.responses import HTMLResponse, FileResponse
@@ -12,6 +13,7 @@ try:
from sqlalchemy.ext.asyncio.session import AsyncSession
except ImportError:
os.system("pip install -r requirements.txt")
import chardet
from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks
from starlette.requests import Request
from starlette.responses import HTMLResponse, FileResponse
+2 -1
View File
@@ -4,4 +4,5 @@ SQLAlchemy==1.4.44
python-multipart==0.0.5
uvicorn==0.15.0
greenlet==2.0.1
starlette~=0.22.0
starlette~=0.22.0
chardet == 5.1.0
+14 -1
View File
@@ -1,7 +1,20 @@
from starlette.config import Config
from utf8togbk import convert_encoding
import os
import shutil
# 配置文件.env
# 请将.env移动至data目录,方便docker部署
# 判断根目录下是否存在.env文件
if os.path.exists('.env'):
# 将文件复制到data目录
shutil.copy('.env', 'data/.env')
# 获取data目录下的.env文件编码,如果为utf-8编码,就转换为gbk编码
convert_encoding('./data/.env')
elif os.path.exists('data/.env'):
# 获取data目录下的.env文件编码,如果为utf-8编码,就转换为gbk编码
convert_encoding('./data/.env')
config = Config("data/.env")
# 是否开启DEBUG模式
DEBUG = config('DEBUG', cast=bool, default=False)
+21
View File
@@ -0,0 +1,21 @@
import chardet
# 将UTF-8编码的文件转换为GBK编码
def utf8togbk(file):
with open(file, 'r', encoding='utf-8') as f:
lines = f.readlines()
with open(file, 'w', encoding='gbk') as f:
f.writelines(lines)
# 获取文件编码
def get_encoding(file):
with open(file, 'rb') as f:
return chardet.detect(f.read())['encoding']
# 获取文件编码,如果为utf-8编码,就转换为gbk编码
def convert_encoding(file):
if get_encoding(file) == 'utf-8':
utf8togbk(file)