导入CSV到Django模型时土耳其字符无法显示的问题求助
解决Django导入CSV时土耳其字符乱码问题
嘿,我懂你遇到的土耳其字符显示异常的困扰了!问题的核心其实是读取CSV文件时没有明确指定正确的编码格式,默认的系统编码往往和土耳其语常用的编码不匹配,所以才会出现乱码。
直接修改读取代码
你之前的代码里,fs.open(filename, mode='r')没有指定编码,会自动使用操作系统的默认编码(比如Windows上是GBK,Linux是UTF-8但也不一定适配土耳其语场景)。我们只需要在打开文件时加上编码参数即可:
情况1:CSV文件是UTF-8编码
修改读取部分的代码,明确指定UTF-8编码:
if request.method == 'POST' and request.FILES['csv_file2']: myfile = request.FILES['csv_file2'] fs = FileSystemStorage() filename = fs.save(myfile.name, myfile) # 重点:添加encoding='utf-8'参数 data = csv.reader(fs.open(filename, mode='r', encoding='utf-8'))
情况2:CSV文件是土耳其语常用的Windows-1254编码
如果用UTF-8还是不行,大概率你的CSV文件是Windows系统生成的,这类文件默认编码是windows-1254(土耳其语专属编码),这时候换成这个编码试试:
if request.method == 'POST' and request.FILES['csv_file2']: myfile = request.FILES['csv_file2'] fs = FileSystemStorage() filename = fs.save(myfile.name, myfile) # 使用土耳其语常用的windows-1254编码 data = csv.reader(fs.open(filename, mode='r', encoding='windows-1254'))
额外检查小技巧
不确定CSV文件的编码?可以用Notepad++打开文件,点击顶部菜单栏的「编码」选项,就能看到当前文件的编码格式,然后对应修改代码里的encoding参数就行。
内容的提问来源于stack exchange,提问作者İlkem Çetinkaya
相关产品推荐
相关产品推荐

