当前分类:Django>>正文

UnicodeEncodeError: 'ascii' codec can't encode characters in position 12-21: ordinal not in range(128)

来源:互联网   更新时间:2022年6月16日  

今天用django做一个下载功能,遇到的一个报错,这里记录一下解决过程以及解决方法。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 12-21: ordinal not in range(128)

错误代码:

def DownTxt(self,request,queryset):
    for i in queryset:
        title=i.title+'.txt'        
        newurl=r'http://127.0.0.1:8000/static/'+title
        filepath=r'E:\\txt55\\'
        if not os.path.exists(filepath):
            print("Selected folder not exist, try to create it.")
            os.makedirs(filepath)
        content=i.content
        with open('static/'+title,'w',encoding='utf-8') as fo:
            fo.write(content)
        urllib.request.urlretrieve(newurl, filename=filepath+title)
    messages.success(request,'下载完成了!')

出现这个错误的原因是urllib.request.urlretrieve(url,filename)无法处理含有中文的链接。

比如:http://6yhj,com/tag/我爱学习/这样的就不行。我上面要处理的下载链接中都是含有中文的。

那么就必须将这个链接中的中文进行转换,这时候需要用到urllib.parse.quote

正确代码:

def DownTxt(self,request,queryset):
    for i in queryset:
        title=i.title+'.txt'
        newtitle=urllib.parse.quote(title)
        newurl=r'http://127.0.0.1:8000/static/'+newtitle
        filepath=r'E:\\txt55\\'
        if not os.path.exists(filepath):
            print("Selected folder not exist, try to create it.")
            os.makedirs(filepath)
        content=i.content
        with open('static/'+title,'w',encoding='utf-8') as fo:
            fo.write(content)
        urllib.request.urlretrieve(newurl, filename=filepath+title)
    messages.success(request,'下载完成了!')

这样子之后就解决了啦!

而且也成功下载了我想要的文件。

本文固定链接:https://6yhj.com/leku-p-2894.html  版权所有,转载请保留本地址!
[猜你喜欢]

标签: