您好,匿名用户

django获取server目录下中文文档,提示UnicodeEncodeError

0 投票

问题描述

在Ubuntu Server部署django程序,通过view获取目录下所有文件,传给前端遍历展示,并下载。
如果目录中存在中文文档,提示:

UnicodeEncodeError: 'utf-8' codec can't encode characters in position 6178-6181: surrogates not allowed

问题出现的环境背景及自己尝试过哪些方法

1.针对文件名称进行 str.encode("utf-8").decode("utf-8"),没有效果
2.server本地创建中文文件,不会报错;使用ftp工具上传的就不行

  1. 按照其他指引 importlib.reload(sys)的方式试过,无效果

相关代码

def support(request):
if request.method == "GET":
    print(request)
    support_doc_path = "media/support/"
    doc_list = os.listdir(support_doc_path)
    doc_dict = {}
    for i in doc_list:
        doc_name = i.split(".")[0]
        doc_url = f"/{support_doc_path}{i}"
        doc_dict[doc_name] = doc_url
    return render(request, 'support.html', locals())

请问如何才能实现,ftp上传的文档,django可以获取到,并且传给前端进行渲染,下载?

用户头像 提问 2019年 5月29日 @ 狐狸叫 下士 (861 威望)
分享到:

1个回答

0 投票
 
最佳答案

基本确定是文件名称编码问题
文件通过windows系统上传,,Windows 的文件名中文编码默认为GBK,压缩或者上传后,文件名还会是GBK编码,而Linux中默认文件名编码为UTF8,由于编码不一致所以导致了文件名乱码,在Shell中(或通过http访问),就会乱码

django views获取到的文件名称也是乱码,估计引发了异常

在server上执行转码convmv -f gbk -t utf-8 -r --notest * ,前端不再报异常。

如果能有程序内解决的方式就很好了

用户头像 回复 2019年 5月29日 @ Zac 下士 (982 威望)
选中 2019年 5月16日 @狐狸叫
提一个问题:

相关问题

0 投票
1 回复 56 阅读
用户头像 提问 2015年 10月25日 @ Lady 下士 (562 威望)
0 投票
1 回复 172 阅读
用户头像 提问 2015年 10月3日 @ 末日姐 中士 (1,232 威望)
0 投票
1 回复 148 阅读
用户头像 提问 2016年 4月16日 @ Trundle 中士 (1,407 威望)
0 投票
1 回复 179 阅读
用户头像 提问 2014年 1月21日 @ Warwick 中士 (1,306 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

IT技术交流群 - 随意问
欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...