当前位置: 首页 > 面试题库 >

尽管我正在执行str.decode(),但Python会引发UnicodeEncodeError。为什么?

秦建元
2023-03-14
问题内容

考虑以下功能:

def escape(text):
    print repr(text)
    escaped_chars = []
    for c in text:
        try:
            c = c.decode('ascii')
        except UnicodeDecodeError:
            c = '&{};'.format(htmlentitydefs.codepoint2name[ord(c)])
        escaped_chars.append(c)
    return ''.join(escaped_chars)

它应通过相应的htmlentitydefs转义所有非ascii字符。不幸的是python抛出

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in position 0: ordinal not in range(128)

当变量text包含字符串,其repr()u'Tam\xe1s Horv\xe1th'

但是,我不使用str.encode()。我只用str.decode()。我想念什么吗?


问题答案:

Python有两种类型的字符串:字符串(unicode类型)和字节串(str类型)。您粘贴的代码对字节字符串起作用。您需要类似的函数来处理字符串。

也许这样:

def uescape(text):
    print repr(text)
    escaped_chars = []
    for c in text:
        if (ord(c) < 32) or (ord(c) > 126):
            c = '&{};'.format(htmlentitydefs.codepoint2name[ord(c)])
        escaped_chars.append(c)
    return ''.join(escaped_chars)

我确实想知道这两个功能对您是否真正必要。如果是我,我将选择UTF-8作为结果文档的字符编码,以字符串形式处理文档(无需担心实体),并content.encode('UTF-8')在将其交付给客户端之前执行最后一步。根据所选择的Web框架,您甚至可以直接将字符串传递到API,并让其找出如何设置编码。



 类似资料:
  • 问题内容: create_PaperBean.java 我正在使用struts,当执行该bean时,会在数据库中创建一个表,但是insert的值仍为零!因此,我无法进入正确的页面来进一步运行Web应用程序。我究竟做错了什么? 问题答案: 要么返回SQL数据操纵语言(DML)语句的行数的SQL语句回报 什么 。 创建表既不是INSERT也不是UPDATE,因此正常接收是因为没有行受到影响。

  • 这似乎与对象没有被实例化有关,尽管我不太明白为什么。有人知道出什么事了吗?

  • 我有一个类,它具有应该被注入的字段。 并且有接口仅由类实现,具有的。 当我尝试启动SpringBootApplication时,会抛出。 为什么接口注册为bean的一个,即使它没有注释,也没有包含任何bean配置? 我发现,如果我不使用作为,一切都很好。 有什么想法吗?

  • 我正在做一个编码练习:给定一个整数序列作为一个数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。 所以我写了这段代码: 现在,这段代码似乎适用于大多数序列,但这段代码引发了一个错误: 错误如下: 我只是不明白列表索引怎么可能超出范围…有人有线索吗?

  • 问题内容: 我正在尝试将内容反序列化为自定义类型。 这段代码 引发跟随异常 为什么Gson无法将我的JSON文本正确转换为我的POJO类型? 问题答案: 作为异常消息状态 反序列化时,Gson期望使用JSON对象,但发现了一个JSON数组。由于无法从一种转换为另一种,因此引发了此异常。 此处描述JSON格式。简而言之,它定义了以下类型:对象,数组,字符串,数字和null,以及布尔值和。 在Gson

  • 问题内容: 我正在尝试使用pip安装软件包。我尝试 运行,但是得到了。为什么会出现此错误?如何使用pip安装软件包? 问题答案: 是从命令行而不是Python解释器运行的。这是一个安装模块的程序,因此你可以从Python使用它们。安装模块后,即可打开Python shell并执行。 不是命令行,而是一个交互式解释器。你在其中键入代码,而不是命令。