【问题标题】:What should I do with UnicodeEncodeError:我应该如何处理 UnicodeEncodeError:
【发布时间】:2015-01-14 17:29:58
【问题描述】:

看起来有很多 UnicodeEncodeError 错误,但没有一个对我有用。

我收到此错误:

Traceback (most recent call last):
  File "...", line 86, in <module>

  File "...", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf8' in position 255: ordinal not in range(128)

我该怎么办?

【问题讨论】:

  • 您的完整回溯是什么?你在 to 打印什么(IDE 控制台?终端?Windows 控制台?管道?)
  • 注意错误是encode错误,所以不是decode抛出的,不是直接抛出的。
  • @MartijnPieters a decode 如果字符串不是 unicode,则首先执行隐式 encode;它符合症状。
  • @MarkRansom:是的,这就是为什么我将我的评论限定为不直接
  • 我要打印什么?你是什​​么意思?我已经被这个问题困住了一段时间(4小时),但它仍然不起作用。我该怎么办?

标签: python unicode decode encode


【解决方案1】:

您在new_text 中有已经解码的数据。您要么拥有 unicode 和字节字符串数据的混合体,要么只有 unicode 值。

发生的情况是您要求 Python 解码 已解码的数据,即 unicode 对象。为了完成这项工作,Python 将首先使用默认的 ASCII 编码编码为字节。对于这些对象,这将失败。

要么不解码(如果您的所有数据都已经解码为unicode 对象),或者区分需要解码的对象与已经是unicode 的对象:

[x.decode('utf-8') if isinstance(x, str) else x for x in new_text]

【讨论】:

  • 这没有给出错误,但它仍然没有给我搜索到的字母中的 new_text。这是我得到的文字:ik \nan gkvfscdsennrr\n ip vainsateeyai u\xe5 l rmne vpb 0te\xe6totaktlaks s enns/ndn verseeaen\xe6o1mirglst .diofe Mnsoas ,esfs btelue vlrafsttsefne2kted ok e.n v.fnl,dkky k) entet Imdssk rsedfrg\ngt thgee\n- oKmraeo\n g l e tpsTrs a\nememv \ndtkg\xe5,nrn t pim\xf8mrgr pk\xe6 arenea r iryiksdrlh\xe6 m.
  • @py.codan:我不确定你在这里问什么。您想知道为什么打印的数据使用转义序列吗?如果是这样,请参阅 Python ascii utf unicode 并打印单个元素 (print new_text[0]) 或生成一个 unicode 对象(打印 u' '.join(new_text))。
  • @py.codan:考虑到将 Unicode 数据打印到不支持您的代码点的控制台会导致更多的编码错误。 Windows consose 对此尤其敏感。
  • 我想要一个随机文本,其中包含来自input 的字母。在这篇文章中,我想要 55 个字母,这些字母应该包括 æø。它不应该给出任何意义(new_text),但它应该包括我展示的这些字母。文本本身没有错,它具有“正确”的结构,但它应该是单码的(我认为)。
  • 打印你' '.join(new_text) 帮助我!非常感谢@Martijn Pieters!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 2021-03-03
  • 2017-09-27
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多