日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python基礎(chǔ)教程:Flask上傳文件(包含中文)保存后亂碼問題解決-創(chuàng)新互聯(lián)

Flask是支持文件上傳的,  近來做了一個(gè)上傳SQL文件的功能, SQL中會(huì)使用到中文, 泰文, 馬來西亞文等多種語言, 

成都服務(wù)器托管,創(chuàng)新互聯(lián)提供包括服務(wù)器租用、內(nèi)蒙古服務(wù)器托管、帶寬租用、云主機(jī)、機(jī)柜租用、主機(jī)租用托管、CDN網(wǎng)站加速、國際域名空間等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:18982081108

我們通過Flask接收到文件, 先把文件保存在后端, 保存后卻發(fā)現(xiàn)是亂碼.

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))

    ...

通過上面一段代碼接收并保存中文文件會(huì)亂碼的.

如何解決呢?

首先考慮亂碼是如何產(chǎn)生的呢, 兩種不同的編碼方式導(dǎo)致的.

通過Python的chardet模塊的detect方法可以獲取到字符串的編碼方式

file = request.files.get('file')

sql_content = file.read()

encoding = chardet.detect(sql_content)['encoding']

我的項(xiàng)目中獲取的編碼方式是GB2312編碼

解決編碼錯(cuò)亂的問題就是先正確解碼, 再重新編碼, 本項(xiàng)目中是先用GB2312解碼, 然后用UTF-8編碼. 如下:

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

上面重新編碼后的sql_content的再重新寫入文件對(duì)象, 然后保存就解決了中文亂碼的問題.

file.truncate()

file.seek(0)

file.write(sql_content)

file.save('test.sql')

后臺(tái)之間保存文件的亂碼問題解決后, 我們通過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文件上傳至文件服務(wù)器

        try:

            pass

        except Exception as err:

            print('[MINIO]:', err)

            return jsonify(code=1, msg='SQL文件上傳至文件服務(wù)器時(shí)失敗')

        return jsonify(code=0, msg='Success')


網(wǎng)頁名稱:Python基礎(chǔ)教程:Flask上傳文件(包含中文)保存后亂碼問題解決-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://www.dlmjj.cn/article/gicdi.html