相关疑难解决方法(0)

使用通用换行符将Django UploadedFile作为UTF-8处理

在我的django应用程序中,我提供了一个允许用户上传文件的表单.该文件可以采用多种格式(Excel,CSV),来自各种平台(Mac,Linux,Windows),并以各种编码(ASCII,UTF-8)编码.

出于这个问题的目的,让我们假设我有一个正在接收的视图request.FILES['file'],这是一个InMemoryUploadedFile被调用的实例file.我的问题是InMemoryUploadedFile对象(如file):

  1. 不支持UTF-8编码(我\xef\xbb\xbf在文件的开头看到一个,据我所知是一个标志,意思是'这个文件是UTF-8').
  2. 不支持通用换行符(可能是上传到此系统的大多数文件都需要).

使问题复杂化的是我希望将文件传递给python csv模块,该模块本身不支持Unicode.我很乐意接受避免这个问题的答案 - 一旦我让django玩UTF-8,我相信我可以大胆csv地做同样的事情.(同样,请忽略支持Excel的要求 - 在解决Excel文件之前,我要等到CSV工作.)

我已经尝试使用StringIO,mmap,codec,和任何的各种各样的在访问数据的方法InMemoryUploadedFile的对象.每种方法都产生了不同的错误,到目前为止还没有一种是完美的.这显示了一些我认为最接近的代码:

import csv
import codecs

class CSVParser:
    def __init__(self,file):
        # 'file' is assumed to be an InMemoryUploadedFile object.
        dialect = csv.Sniffer().sniff(codecs.EncodedFile(file,"utf-8").read(1024))
        file.open() # seek to 0
        self.reader = csv.reader(codecs.EncodedFile(file,"utf-8"),
                                 dialect=dialect)
        try:
            self.field_names = self.reader.next()
        except StopIteration:
            # The file was empty - this is not allowed.
            raise …
Run Code Online (Sandbox Code Playgroud)

python django

12
推荐指数
1
解决办法
7833
查看次数

标签 统计

django ×1

python ×1