gpt4 book ai didi

python - 在 python 中,为什么调用字符串 "X"以 ASCII 显示它,但调用 "print X"以 unicode 显示它?

转载 作者:行者123 更新时间:2023-11-28 21:48:28 28 4
gpt4 key购买 nike

我有一个字符串列表,按照 list=[a,b,c,d,e]

当我调用 list[2] 时,字符串 c 显示为 ASCII;但是,当我调用 print list[2] 时,它显示为 unicode。为什么会存在这种差异?

最佳答案

这主要是因为 Python 2 中的字符串不是文本字符串,而是字节字符串

我假设您处于 REPL 环境(Python 控制台)中。当您在控制台中评估某些内容时,您会得到它的打印表示,这与在表达式上调用 print repr() 相同:

l = ['ñ']
l[0] # should output '\xc3\xb1'
print repr(l[0]) # should output the same

这是因为您的控制台处于 UTF-8 模式(如果您对 ñ 有不同的表示,那是因为您的控制台使用了一些其他文本表示)所以当您按 ñ 你实际上输入了两个字节 0xc30xb1

repr()是一个始终返回字符串的 Python 方法。对于基本类型,此字符串是重建作为参数传递的值的有效来源。在这种情况下,它返回一个包含字节序列的字符串,该字节序列使用编码为 UTF-8 的 ñ 重新创建另一个字符串。要查看此内容:

repr(l[0]) # should print a string within a string: "'\\xc3\\xb1'"

因此,当您打印它时(这与在控制台中进行评估相同),您会得到相同的字符串,但没有外引号并且转义字符被正确替换。即:

print repr(l[0]) # should output '\xc3\xb1'

但是,当您打印值时,即:print l[0],然后您将这两个字节发送到控制台。由于控制台处于 UTF-8 模式,它解码序列并将其转换为仅一个字符:ñ。所以:

print l[0] # should output ñ

如果要存储文本字符串,必须在字符串前使用修饰符u。这样:

text = u'ñ'

现在,在评估文本时,您将看到 its Unicode codepoint :

text # should output u'\xf1'

打印它应该重新创建 ñ 字形:

print text # should output `ñ`

如果要将text转换为字节串表示,则需要编码方案(如UTF-8):

text.encode('utf-8') == l[0] # should output True

同样,如果您想要 l[0] 的 Unicode 表示,您需要解码这些字节:

l[0].decode('utf-8') == text # should output True

综上所述,请注意在 Python 3 中,默认字符串确实是 Unicode 字符串,您需要在文字符号前加上 b 以生成字节字符串。

关于python - 在 python 中,为什么调用字符串 "X"以 ASCII 显示它,但调用 "print X"以 unicode 显示它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298658/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com