簡體   English   中英

'utf-8'編解碼器無法解碼位置14的字節0x97:無效的起始字節

[英]'utf-8' codec can't decode byte 0x97 in position 14: invalid start byte

單擊按鈕后,我想從服務器下載一個目錄。 該目錄應以zip格式下載。 我正在使用Django和Python。 我之前用相同的代碼嘗試了此操作,但它在Python2 venv上。 Python3 venv上的相同代碼使utf-8編解碼器無法解碼字節錯誤。 該目錄的zip文件已成功創建,但是當我按我網站上的下載按鈕時,它使我拋出了錯誤。

@login_required
def logs_folder_index(request):
    user = request.user
    if not is_moderator(user):
        raise Http404("You are not allowed to see this page.")
    else:
        if os.path.exists('Experiments.zip'):
            os.remove('Experiments.zip')
        zipf = zipfile.ZipFile('Experiments.zip','w',zipfile.ZIP_DEFLATED)
        path = settings.BASE_DIR + '/experiments/'
        zipdir(path,zipf)
        zipf.close()
        zip_file = open('Experiments.zip','r')
        response = HttpResponse(zip_file, 
                content_type='application/force-download')
        response['Content-Disposition'] = 'attachment; filename="{0}"'\
                                        .format(Experiments.zip)
        return response

有人可以幫我解決這個問題。

您將文件作為文本流讀取(因為模式為'r' ,而不是'rb' )。 由於zip通常不會以UTF-8(或一般而言,任何文本編解碼器)進行編碼,因此最終可能會到達無法解碼(或將被毫無意義地解碼)的字節序列,因此您應將其讀為二進制文件:

@login_required
def logs_folder_index(request):
    user = request.user
    if not is_moderator(user):
        raise Http404("You are not allowed to see this page.")
    elif os.path.exists('Experiments.zip'):
        os.remove('Experiments.zip')
    with zipfile.ZipFile('Experiments.zip','w',zipfile.ZIP_DEFLATED) as zipf:
        path = settings.BASE_DIR + '/experiments/'
        zipdir(path,zipf)
    with open('Experiments.zip','rb') as stream:
        response = HttpResponse(stream, content_type='application/force-download')
        response['Content-Disposition'] = 'attachment; filename="Experiments.zip"'
        return response

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM