兼容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 7f44093c91
commit ea52327e49
4 changed files with 39 additions and 2 deletions
+2
View File
@@ -4,6 +4,7 @@ import asyncio
from pathlib import Path from pathlib import Path
import os import os
try: try:
import chardet
from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks
from starlette.requests import Request from starlette.requests import Request
from starlette.responses import HTMLResponse, FileResponse from starlette.responses import HTMLResponse, FileResponse
@@ -12,6 +13,7 @@ try:
from sqlalchemy.ext.asyncio.session import AsyncSession from sqlalchemy.ext.asyncio.session import AsyncSession
except ImportError: except ImportError:
os.system("pip install -r requirements.txt") os.system("pip install -r requirements.txt")
import chardet
from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks
from starlette.requests import Request from starlette.requests import Request
from starlette.responses import HTMLResponse, FileResponse from starlette.responses import HTMLResponse, FileResponse
+1
View File
@@ -5,3 +5,4 @@ python-multipart==0.0.5
uvicorn==0.15.0 uvicorn==0.15.0
greenlet==2.0.1 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 starlette.config import Config
from utf8togbk import convert_encoding
import os
import shutil
# 配置文件.env # 配置文件.env
# 请将.env移动至data目录,方便docker部署 # 请将.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") config = Config("data/.env")
# 是否开启DEBUG模式 # 是否开启DEBUG模式
DEBUG = config('DEBUG', cast=bool, default=False) 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)