使用“utf8”编码unicode仅对nonascii显示bytestrings

2024-06-16 09:31:32 发布

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

我在运行python2.7.10

想弄清楚为什么会出现以下行为。(当然有合理的解释)

所以我定义了两个unicode字符,第一个在ascii集中,第二个在它之外。在

>>> a=u'\u0041'
>>> b=u'\u1234'
>>> print a
A
>>> print b
ሴ

现在我对它进行编码,看看对应的字节是多少。但只有后者给出了我期望看到的结果(字节)

^{pr2}$

也许问题出在我的意料之中,如果是这样的话,你们中的一个可以解释缺陷在哪里。 -我的a,b是unicode(内部序号的十六进制值) -当我打印这些字符时,解释器打印每个unicode字节对应的实际字符。 -当我编码时,我假设它将使用我提供的编码方案(在本例中是utf-8)转换为字节字符串。我希望看到a.encode的bytestring,就像我对b.encode所做的那样。在

我错过了什么?在


Tags: 编码字节定义asciiunicode字符解释器encode
1条回答
网友
1楼 · 发布于 2024-06-16 09:31:32

没有瑕疵。您编码为UTF-8,它使用与ASCII标准相同的字节来表示Unicode标准的前127个码位,其他所有代码都使用多个字节(介于2到4之间)。在

然后在终端中回送该值,该终端使用repr()函数构建调试表示。该表示为字符串生成一个有效的Python表达式,即ASCII-safe。该值中不可作为ASCII字符打印的字节将显示为转义序列。因此,UTF-8字节显示为\xhh十六进制转义符。在

最重要的是,因为A是一个可打印的ASCII字符,所以它是按原样显示的;任何代码编辑器或终端都将接受ASCII,而对于大多数显示实际文本的英文文本来说,这要有用得多。在

注意,您对存储在ab中的unicode值使用了print,这意味着Python将这些值编码到终端编解码器中,与终端协调以生成正确的输出。您没有回显解释器中的值。如果您这样做了,您还会看到调试输出:

>>> a = u'\u0041'
>>> b = u'\u1234'
>>> a
u'A'
>>> b
u'\u1234'

在python3中,repr()函数(或者更确切地说,object.__repr__钩子)的功能已经更新,以生成一个unicode字符串,其中大多数可打印代码点都没有转义。使用新的ascii()函数来获得上述行为。在

相关问题 更多 >