为什么下面两个命令的输出不同?
$ python2.7 -c 'print("\303\251")'
é # <-- Great
$ python3.6 -c 'print("\303\251")'
é # <-- WTF?!
从“ \ 303 \ 251”输出“é”的python3命令是什么?
最诚挚的问候,
奥利维尔
答案 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())'
é