Python基礎教程:Flask上傳檔案(包含中文)儲存後亂碼問題解決
Flask是支援檔案上傳的, 近來做了一個上傳SQL檔案的功能, SQL中會使用到中文, 泰文, 馬來西亞文等多種語言,
我們透過Flask接收到檔案, 先把檔案儲存在後端, 儲存後卻發現是亂碼.
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')
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2663557/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HttpClient多檔案上傳程式碼及普通引數中文亂碼問題解決HTTPclient
- Zuul上傳檔案,中文檔名亂碼解決辦法Zuul
- 解決PHP匯出CSV檔案中文亂碼問題PHP
- python 中文亂碼問題解決方案Python
- Java 讀檔案寫檔案 韓文 中文 亂碼問題解決方案Java
- jn專案-解決前臺中文引數傳到後臺亂碼問題
- 解決中文亂碼問題
- js解決url傳引數中文亂碼問題JS
- MySql中文亂碼問題解決MySql
- Jmeter 解決中文亂碼問題JMeter
- Java 解決中文亂碼問題Java
- RDSSQLSERVER解決中文亂碼問題SQLServer
- 解決MySQL中文亂碼問題MySql
- 解決java web中safari瀏覽器下載後檔案中文亂碼問題JavaWeb瀏覽器
- 前臺傳中文到後臺Controller亂碼問題的解決Controller
- springMVC儲存資料到mysql資料庫中文亂碼問題解決方法SpringMVCMySql資料庫
- Struts2 URL 傳參,中文亂碼問題解決
- JSP中文亂碼問題終極解決方案(上)JS
- MySQL直接匯出CSV檔案,並解決中文亂碼的問題MySql
- 解決plsql中中文亂碼問題SQL
- springmvc 解決中文亂碼問題SpringMVC
- js解決url中文亂碼問題JS
- python檔案中寫中文亂碼怎麼解決Python
- OSS物件儲存的檔案追加上傳問題及解決方案物件
- Python:Python中文寫入csv檔案出現亂碼問題的解決方案之一Python
- ajax使用url傳遞中文引數亂碼問題解決
- 解決cookies儲存中文報錯問題Cookie
- confluence上傳檔案附件預覽亂碼問題
- Python中文亂碼問題Python
- java中解決request中文亂碼問題Java
- SpringMvc解決Restful中文亂碼問題SpringMVCREST
- 讀mysql中文亂碼問題解決方法MySql
- DES加密中文亂碼問題的解決加密
- Jenkins Git 中文亂碼問題解決JenkinsGit
- CentOS中文亂碼問題的解決方法CentOS
- python json.dumps中文亂碼問題解決PythonJSON
- 解決excel開啟.csv檔案亂碼問題Excel
- Flask——檔案上傳Flask