如何解码一个unicode字符串Python [重复]
Posted
技术标签:
【中文标题】如何解码一个unicode字符串Python [重复]【英文标题】:How to decode a unicode string Python [duplicate] 【发布时间】:2016-05-07 02:53:35 【问题描述】:解码如下编码字符串的最佳方法是:u'u\xf1somestring'
?
背景:我有一个包含随机值(字符串和整数)的列表,我正在尝试将列表中的每个项目转换为字符串,然后处理每个项目。
原来有些项目的格式是:u'u\xf1somestring'
当我尝试转换为字符串时,出现错误:UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 1: ordinal not in range(128)
我试过了
item = u'u\xf1somestring'
decoded_value = item.decode('utf-8', 'ignore')
但是,我不断收到同样的错误。
我已经阅读了有关 unicode 字符的信息,并尝试了一些 SO 的建议,但到目前为止都没有奏效。我在这里错过了什么吗?
【问题讨论】:
如果是 Unicode 字符串,则已经解码。 这篇文章可能对您有所帮助:Pragmatic Unicode,由 SO 资深人士 Ned Batchelder 撰写。 我假设您使用的是 Python 2。您应该总是提及带有 Unicode 问题的 Python 版本(最好使用适当的标签),因为 Python 2 和 Python 3 处理 Unicode 而不是不同。 FWIW,s = u'u\xf1somestring'.encode('utf-8');print s, repr(s)
打印 uñsomestring 'u\xc3\xb1somestring'
【参考方案1】:
您需要调用encode
函数而不是decode
函数,因为item
已经解码。
像这样:
decoded_value = item.encode('utf-8')
【讨论】:
您解码为Unicode,encode为字节串。 @MarkTolonen:那么您在这里发现我的答案的哪一部分有误?我专门使用了代码块来表明我在这里使用了方法名称。 如果是 Unicode 字符串,则该字符串已经解码。item.encode('utf-8')
生成 encoded_value
。您(和 OP)混淆了术语。【参考方案2】:
那个字符串已经被解码了(它是一个Unicode对象)。如果要将其存储在文件中(或将其发送到哑终端等),则需要对其进行编码。
通常,在使用 Unicode 时,您应该(在 Python 2 中)在工作流程的早期解码所有字符串(您似乎已经完成了;许多处理互联网流量的库已经为您完成了),然后执行您在 Unicode 对象上所做的所有工作,然后在最后将它们写回时,将它们编码为您正在使用的任何编码。
【讨论】:
以上是关于如何解码一个unicode字符串Python [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Python—编码与解码(encode()和decode())
即使一切都是 unicode(python 2.7),ascii 解码错误