【问题标题】:Django - File Upload: Open the file as text instead of bytesDjango - 文件上传:将文件作为文本而不是字节打开
【发布时间】:2014-08-14 12:27:45
【问题描述】:

在 Python 3.3 和 Django 1.6 上

是否可以在 ModelForm 的视图中以文本文件而不是字节的形式打开上传的文件?

这是一些示例代码:

def post(self, request, *args, **kwargs):
    """
    Methode POST
    Utilisé lors de l'envoie du formulaire
    :return: Soit un message de succès, soit le formulaire retourné avec erreurs
    """
    form = FormulaireUploadFichierDonnee(request.POST, request.FILES)

    if form.is_valid():
        fichier = request.FILES['fichier']
        volet = form.cleaned_data['volet']

        validateur = ValidateurFactory.factory(volet)

        compteur_erreurs = 0
        liste_obj = []
        liste_erreurs = []

        for ligne in fichier.readlines():
            validateur.ligne = ligne.split('\t')
            obj =  validateur.creer_objet()
            if obj:
                liste_obj.append(obj)
            else:
                compteur_erreurs += 1
                liste_erreurs.append(ligne)

        if liste_obj:
            instance = UploadFichierDonnees(fichier=request.FILES['fichier'])
            instance.utilisateur = request.user
            instance.save()
            return HttpResponse(str(liste_obj) + "<br> Erreurs: " + str(compteur_erreurs))
        else:
            return HttpResponse(str(liste_erreurs) + "<br> Erreurs: " + str(compteur_erreurs))

    else:
        return render(request, 'tabstat/vue_ajout_fichier.html', {
            'form': form,
        })

基本上,我需要遍历文件中的每一行,将它们拆分到选项卡上,并使用验证器从那里处理数据。问题是我无法获取字符串对象,我得到了一个字节字符串。

我尝试用.decode('utf-8')对其进行解码:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 62: invalid continuation byte

.decode('ascii'):

'ascii' codec can't decode byte 0xe9 in position 62: ordinal not in range(128)

,没有成功。我尝试使用 CSV 阅读器(因为它是一个 CSV 文件),但它也无法正常工作。

【问题讨论】:

    标签: python django csv encoding utf-8


    【解决方案1】:

    嗯,看来只是编码问题。

    尝试了其他解码方式,发现latin-1是正确的。

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2011-03-07
      相关资源
      最近更新 更多