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
- 解決PHP匯出CSV檔案中文亂碼問題PHP
- 解決中文亂碼問題
- python json.dumps中文亂碼問題解決PythonJSON
- Python:Python中文寫入csv檔案出現亂碼問題的解決方案之一Python
- 解決java web中safari瀏覽器下載後檔案中文亂碼問題JavaWeb瀏覽器
- springmvc 解決中文亂碼問題SpringMVC
- MySql中文亂碼問題解決MySql
- Jmeter 解決中文亂碼問題JMeter
- python檔案中寫中文亂碼怎麼解決Python
- 關於本地GB2312編碼的檔案上傳github後 中文出現亂碼的問題Github
- MySQL直接匯出CSV檔案,並解決中文亂碼的問題MySql
- OSS物件儲存的檔案追加上傳問題及解決方案物件
- js解決url中文亂碼問題JS
- 解決plsql中中文亂碼問題SQL
- 解決excel開啟.csv檔案亂碼問題Excel
- phantomjs截圖中文亂碼問題解決JS
- Python BeautifulSoup中文亂碼問題Python
- 使用 IntelliJ IDEA 編譯 Jmeter5.3 原始碼-基於 Gradle,解決上傳附件中文名稱亂碼與錄製指令碼中文亂碼問題IntelliJIdea編譯JMeter原始碼Gradle指令碼
- [20211229]sql語句包含中文儲存clob的編碼問題.txtSQL
- Flask——檔案上傳Flask
- 雲伺服器中文亂碼問題解決伺服器
- 解決Url帶中文引數亂碼問題
- Sublime Text 3 中文亂碼問題的解決
- SqlServer資料庫中文亂碼問題解決SQLServer資料庫
- 完美解決jspdf各種中文亂碼問題JS
- 解決zabbix圖形化中文亂碼問題
- LiveCharts中文顯示亂碼問題的解決Echarts
- python爬蟲爬取網頁中文亂碼問題的解決Python爬蟲網頁
- springmvc向前端傳送json資料中文亂碼問題解決方法SpringMVC前端JSON
- 檔案包含漏洞(本地包含配合檔案上傳)
- 豬行天下之Python基礎——7.1 檔案儲存Python
- shell基礎教程二十四: shell基礎教程: Shell檔案包含
- 解決Intellij IDEA中執行緩慢的問題,tomcat控制檯列印亂碼問題,國際化亂碼配置檔案亂碼解決IntelliJIdeaTomcat
- c#匯出檔案,檔名中文亂碼解決方法C#
- 【爬坑日記】Mac中Excel儲存csv格式檔案 字元亂碼問題MacExcel字元
- JMeter響應亂碼問題解決方案教程JMeter
- 解決Eclipse中文註釋部分亂碼的問題Eclipse