首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'unicode‘和'encode’之间的关系是什么?

'unicode‘和'encode’之间的关系是什么?
EN

Stack Overflow用户
提问于 2010-01-08 02:17:50
回答 2查看 5.1K关注 0票数 1
代码语言:javascript
复制
print u'\xe4\xf6\xfc'.encode('utf-8')
print unicode(u'\xe4\xf6\xfc')

回溯:

代码语言:javascript
复制
盲枚眉
Traceback (most recent call last):
  File "D:\zjm_code\a.py", line 6, in <module>
    print unicode(u'\xe4\xf6\xfc')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

python外壳

代码语言:javascript
复制
>>>u"äöü".encode('utf-8')
Unsupported characters in input
EN

回答 2

Stack Overflow用户

发布于 2010-01-08 02:37:49

编码错误:

代码语言:javascript
复制
print unicode(u'\xe4\xf6\xfc')

unicode()调用在这里什么也不做,因为它的参数已经是unicode对象了。然后,print尝试输出该unicode对象,为此,print希望将其转换为终端编码中的字符串。但是python似乎不知道您的终端使用哪种编码方式,因此可以使用uses的“安全”替代方案。

由于u'\xe4\xf6\xfc'不能用Ascii表示,这将导致编码错误。

Unicode,编码和解码:

通常,encode()将unicode对象转换为具有特定字符编码的字符串,例如UTF-8或ISO-8859-1。每个unicode代码点都被转换为该编码中的字节序列:

代码语言:javascript
复制
>>> u'\xe4\xf6\xfc'.encode('utf-8')
'\xc3\xa4\xc3\xb6\xc3\xbc'

相反的是decode(),它将特定编码中的字符串转换为包含相应unicode代码点的unicode对象。

代码语言:javascript
复制
>>> '\xc3\xa4\xc3\xb6\xc3\xbc'.decode('utf-8')
u'\xe4\xf6\xfc'

印刷:

带有string参数的print只打印该字符串的原始字节。如果这导致期望的输出,则取决于终端的字符编码。

代码语言:javascript
复制
>>> print '\xc3\xa4\xc3\xb6\xc3\xbc'  # utf-8 encoding on utf-8 terminal
äöü
>>> print '\xe4\xf6\xfc'              # same encoded as latin-1
���

当给定unicode参数时,print首先尝试在终端编码中对unicode对象进行编码。这只有在python猜测终端的正确编码并且编码实际上可以表示unicode对象的所有字符时才有效。否则,编码会引发异常,或者输出包含错误的字符。

代码语言:javascript
复制
>>> print u'\xe4\xf6\xfc'             # it correctly assumes a utf-8 terminal
äöü
票数 7
EN

Stack Overflow用户

发布于 2010-01-08 02:34:21

这在本教程unicode方法中都有介绍。

unicode函数将非unicode (默认情况下为ascii,但它也接受其他编码)字符串转换为unicode。这里的错误是,您传递的字符串已经是unicode,并要求将其转换为unicode.

unicode字符串上的encode函数将其转换为非unicode编码--同样,ascii是默认的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2025041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档