utf-8的python 2和python 3之间的区别

时间:2018-10-03 20:41:31

标签: python utf-8

为什么下面两个命令的输出不同?

$ python2.7 -c 'print("\303\251")' 
é   # <-- Great

$ python3.6 -c 'print("\303\251")'
é  # <-- WTF?!

从“ \ 303 \ 251”输出“é”的python3命令是什么?

最诚挚的问候,

奥利维尔

2 个答案:

答案 0 :(得分:3)

在Python 2上,您要告诉Python打印两个字节。它打印两个字节。您的终端将这两个字节解释为AsyncInputStream fileContent = new AsyncInputStream(routingContext.vertx(), fileInputStream); fileContent.endHandler((ev) -> { routingContext.response().end(); }); Pump.pump(fileContent, routingContext.response()).start(); 的编码,并显示é。 (看来您的终端使用的是UTF8。)

在Python 3上,您要告诉Python打印带有Unicode代码点0o303和0o251(八进制)的两个字符。这些字符是é。 Python使用系统相关的编码(可能是UTF8)对这些字符进行编码,并将结果字节写入stdout。然后,您的终端会解码字节并显示é

如果您希望Python 3打印é,请给它提供Unicode代码点(é),或者只是告诉它打印\u00e9

é

答案 1 :(得分:0)

如user2357112的第一个答案所述,此行告诉Python 3打印两个由其八进制值指示的字符(八进制字节表示该字符的unicode代码点):

$ python3.6 -c 'print("\303\251")'
é

以下行可用于类似于Python 2的行为:

$ python3.6 -c 'print(b"\303\251".decode())'
é