2016-11-30 3 views
0

У меня есть сохраненный HTML-файл, который я хочу открыть из моего внешнего интерфейса.Почему Flask send_file() испортил кодировку

Веб-страница имеет японские иероглифы на нем и имеет следующий метатег <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />

Если я перетащить файл в любой из Chrome, IE или Firefox, страница открывается правильно. Однако, когда я использую Flask для получения файла, кодировка перепутана, и все японские символы отображаются как символ..

В моем webapp я использую маршрут Flask, чтобы получить файл и отправить его на мой передний конец. Так что в моем переднем конце у меня есть следующий тег

<a href="/getFile/the_saved_file.html" target="_blank"></a>

И в моей Колбе приложении у меня есть следующий маршрут:

@app.route('/getFile/<file>/') 
def get_file(file): 
    file_path = os.path.join(FILE_STORAGE_PATH, file) 
    return send_file(file_path) 

Когда я нажимаю <a> ссылки, файл открывается в индивидуальном вкладка.

Как я могу заставить Flask вести себя так же, как перетаскивание, когда дело доходит до сохранения кодировки?

+1

У меня нет для вас решения, но проблема в том, что 'send_file()' автоматически определяет тип содержимого и поставляет заголовок 'Content-Type: text/html; кодировка = UTF-8'. Как только кодировка определена в заголовках, она не может быть переопределена мета http-equiv. –

+0

Как насчет попытки «открыть» и прочитать содержимое файла, а затем вернуть 'contents.encode ('UTF-8')'? – YellowShark

ответ

0

Override автоматического определения типа содержимого, установив параметр MIMETYPE при вызове send_file

return send_file(file_path, mimetype="Content-Type: text/html; charset=Shift_JIS") 
+0

, так что это работает, но я хочу посмотреть, могу ли я отложить решение для набора символов в браузере. Не все мои файлы Shift_JIS. –