我永远不会知道python2.7的解码和编码系统

2024-05-16 10:56:39 发布

您现在位置:Python中文网/ 问答频道 /正文

很抱歉像个傻瓜一样问这个问题,但也许有人能帮我走出Python2.7的解码/编码地狱

我有一个字符串如下,我不确定,但我认为它被编码为UTF-8,因为我在py文件的头写了# -*- coding: utf-8 -*-

s = "今日もしないとね"

我的观点是,如果它是一个字符串,它的一部分可以用[]这样打印出来:

print s[1]

然后我的崇高中出现了一个错误:

[Decode error - output not utf-8]

我在候机楼试过了我得到了一个

?

好吧,也许utf-8字符串的一部分会变成不是utf-8字符串,所以我试着:

print s[1].encode("utf-8")

然后我得到了这个:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xbb in position 0: ordinal not in range(128)

我完全糊涂了。这是否意味着字符串的一部分是类似于\xbb的ascii码?你知道吗

有人能告诉我下面这些东西的编码是什么吗?你知道吗

a = "今日もしないとね"
b = u"今日もしないとね"
c = "python2.7 fxxked me"
d = u"python2.7 fxxked me"
e = "今"
f = "z"
aa = a[0]
bb = b[0]
cc = c[0]
dd = d[0]

如何从"今日,もしないとね"得到"今日"?你知道吗

谢谢你!你知道吗


Tags: 文件字符串inpy编码asciinot解码
2条回答

您的文件是用UTF-8正确编码的,但是您的操作系统(直接)不支持Unicode输出。你知道吗

在python2中指定Unicode字符串文字的正确方法是使用“u”前缀。只有在这种情况下,Unicode字符串才实际存储在那里。你知道吗

顺便说一下,您可以看到Python使用repr函数对变量内容的实际想法:

>>> print a
'\xe4\xbb\x8a\xe6\x97\xa5\xe3\x82\x82\xe3\x81\x97\xe3\x81\xaa\xe3\x81\x84\xe3\x81\xa8\xe3\x81\xad'
>>> print b
u'\u4eca\u65e5\u3082\u3057\u306a\u3044\u3068\u306d'

正如评论所指出的,unicode不像Python的许多其他部分那么容易发现和学习

下面的代码示例将打印“今”

# -*- coding: utf-8 -*-
b = u"今日もしないとね"
print b[:2]

但是-编码行只告诉Python如何解释文件中的那些字节。许多编辑器不会寻找编码行,您需要确保它们实际上也在使用utf-8,以确定如何向您显示这些字节。你知道吗

当Python到达print语句时,它将接受unicode对象b,并使用sys.stdout.encoding对其进行编码。现在,这也更好地匹配您的终端/控制台设置,否则您将得到一些垃圾打印代替。你知道吗

相关问题 更多 >