“latin1”编解码器无法对位置6770中的字符进行编码:序号不在范围内(256)

2024-10-04 11:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个url链接,其中包含一些用于请求的中文字符(http://localhost:8000/media/imges/qiyun_admin_physicalserver_webmanage/operation_system/域名解析.png

如果我从浏览器地址栏复制包含中文的url,它将变成: http://localhost:8000/media/imges/qiyun_admin_physicalserver_webmanage/operation_system/%E5%9F%9F%E5%90%8D%E7%BB%91%E5%AE%9A.png

出现错误:

'latin-1' codec can't encode characters in position 67-70: ordinal not in range(256)

enter image description here

我在SO中找到了一个相关的帖子: UnicodeEncodeError: 'latin-1' codec can't encode character

我已经检查了数据库使用utf-8编码,表也是utf-8

enter image description here

enter image description here

但为什么我会得到编码错误?如何解决这个问题?在

我的后端是Django/Django Rest框架。在


Tags: localhosthttpurladminpng错误operationsystem
1条回答
网友
1楼 · 发布于 2024-10-04 11:24:58

我也面临同样的问题 这里的问题是图像“文件”的名称 我认为它在开发服务器上运行良好,在生产服务器上会出错

这需要一些配置,以使服务器能够提供这样名称的文件。 为了安全起见,URL和文件名将在URL中 如前所述 我想出了一个解决方案来改变文件或图像的名称,如果它的形状不正确,就像这个答案提到的https://stackoverflow.com/a/1547940/6840261 我是
不生成名称我只将文件命名为“a.thesameextension_of the file”和django处理多个同名文件 必须在save()处添加代码才能应用于新模型的每次更改或添加

class City(models.Model):
    name = models.CharField(max_length=100, verbose_name=_("City Name"),
                            validators=[RegexValidator(r'^[\u0621-\u064A\u0660-\u0669]+$')])
    city_image = models.ImageField(upload_to='city/images/', blank=False, null=True, verbose_name=_("City Image"))

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        name = self.city_image.name
        extension = name.split('.')[-1]
        for char in name:
            if char not in 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.':
                self.city_image.name = 'a' + '.' + extension
                break
        instance = super(City, self).save(force_insert=False, force_update=False, using=None,
                                          update_fields=None)

这个解决方案会很好地工作,正如我在自己的问题中提到的,还有另一个解决方案,但我认为这不是一个好的解决方案,因为您必须向django请求处理程序和wsgi的核心添加代码 你可以检查一下How to fix [ERROR] [2699022] wsgiHandler pApp->start_response() return NULL?

相关问题 更多 >