第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Flask上傳文件(包含中文)保存后亂碼問題解決

標簽:
Python Flask

Flask是支持文件上传的, 近来做了一个上传SQL文件的功能, SQL中会使用到中文, 泰文, 马来西亚文等多种语言, 我们通过Flask接收到文件, 先把文件保存在后端, 保存后却发现是乱码.
上传的逻辑参考Flask文档文件上传部分(https://dormousehole.readthedocs.io/en/latest/quickstart.html#id17
), 摘录如下:

from flask import request
from werkzeug.utils import secure_filename

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        f = request.files['the_file']
        f.save('/var/www/uploads/' + secure_filename(f.filename))
    ...

通过上面一段代码接收并保存中文文件会乱码的.


如何解决呢?

首先考虑乱码是如何产生的呢, 两种不同的编码方式导致的.
通过Python的chardet模块的detect方法可以获取到字符串的编码方式

file = request.files.get('file')
sql_content = file.read()
encoding = chardet.detect(sql_content)['encoding']

我的项目中获取的编码方式是GB2312编码
解决编码错乱的问题就是先正确解码, 再重新编码, 本项目中是先用GB2312解码, 然后用UTF-8编码. 如下:

sql_content = sql_content.decode('GB2312').encode('utf-8')

上面重新编码后的sql_content的再重新写入文件对象, 然后保存就解决了中文乱码的问题.

file.truncate()
file.seek(0)
file.write(sql_content)
file.save('test.sql')

后台之间保存文件的乱码问题解决后, 我们通过MINIO的SDK上传的乱码问题也迎刃而解.
代码全览:

# 文件上传接口
class DBTaskSQLFile(Resource):

    # 新建文件
    def post(self):
        file = request.files.get('file')
        file.seek(0)
        sql_content = file.read()
        encoding = chardet.detect(sql_content)['encoding']
        sql_content = sql_content.decode(encoding).encode('utf-8')
        file.truncate()
        file.seek(0)
        file.write(sql_content)
        file.seek(0)

        # SQL文件上传至文件服务器
        try:
            pass
        except Exception as err:
            print('[MINIO]:', err)
            return jsonify(code=1, msg='SQL文件上传至文件服务器时失败')
        return jsonify(code=0, msg='Success')
點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消