为什么Python 2的raw_input输出unicode字符串?

use*_*752 5 python unicode input python-2.x

我在Codecademy的Python课程上尝试了以下内容

hobbies = []

# Add your code below!
for i in range(3):
    Hobby = str(raw_input("Enter a hobby:"))
    hobbies.append(Hobby)

print hobbies
Run Code Online (Sandbox Code Playgroud)

有了它,它工作正常,但如果相反,我尝试

Hobby = raw_input("Enter a hobby:")
Run Code Online (Sandbox Code Playgroud)

我得到[u'Hobby1', u'Hobby2', u'Hobby3'].额外u的来自哪里?

Joh*_*n Y 7

问题的主题可能有点误导:Python 2 raw_input()通常返回一个字节字符串,而不是Unicode字符串.

但是,如果它已被更改或替换(由应用程序或作为Python的替代实现的一部分),它可以返回Unicode字符串sys.stdin.

因此,我相信@ByteCommander的评论是正确的:

也许这与它运行的控制台有关?

Codecademy使用的Python表面上是2.7,但是(a)它是通过使用Emscripten将Python解释器编译为JavaScript 并且(b)它在浏览器中运行来实现的.因此,在这些因素之间,Codecademy注入的一些字符串编码和解码很可能在普通CPython中不存在.

注意:我自己没有使用过Codecademy,也没有内部工作的内部知识.