如何解码一个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 解码错误

Python3'ascii'编解码器无法编码字符

python中的字符串编码问题——4.unicode编解码(以实际工作中遇到的韩文编码为例)

Python解码编码问题

Python字符串的编码与解码(encode与decode)