是x=b';ABC&x27;相当于x=';ABC';。在python3.5中编码(“ascii”)?

是x=b';ABC&x27;相当于x=';ABC';。在python3.5中编码(“ascii”)?,python,python-3.x,ascii,Python,Python 3.x,Ascii,x=b'ABC'是否等同于Python 3.5中的x='ABC'.encode(“ascii”)?这两种方法之间有什么区别。它们产生相同的结果: >>> 'ABC'.encode("ascii") b'ABC' >>> b'ABC' b'ABC' 但是encode()将在运行时而不是在编译时调用编码器。是和否。是的,对于您的特定示例,这两种方法是等效的,因为它们产生相同的结果 然而,对于一般用法,它们有一些细微的区别。例如,考虑他们尝试对非ASCII字符进行

x=b'ABC'
是否等同于Python 3.5中的
x='ABC'.encode(“ascii”)
?这两种方法之间有什么区别。

它们产生相同的结果:

>>> 'ABC'.encode("ascii")
b'ABC'
>>> b'ABC'
b'ABC'

但是
encode()
将在运行时而不是在编译时调用编码器。

是和否。是的,对于您的特定示例,这两种方法是等效的,因为它们产生相同的结果

然而,对于一般用法,它们有一些细微的区别。例如,考虑他们尝试对非ASCII字符进行编码的不同方式:

@>>> b'Æ'
  File "<stdin>", line 1
SyntaxError: bytes can only contain ASCII literal characters.
@>>> 'Æ'.encode("ascii")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\xc6' in position 0: ordinal not in range(128)
@>>>b'Æ
文件“”,第1行
SyntaxError:字节只能包含ASCII文字字符。
@>>>“Æ”。编码(“ascii”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
UnicodeEncodeError:“ascii”编解码器无法对位置0中的字符“\xc6”进行编码:序号不在范围内(128)

在Python 3中进行的快速测试表明,它们确实是等效的:

In [1]: x = b'ABC'

In [2]: y = 'ABC'.encode('ascii')

In [3]: x == y
Out[3]: True

In [4]: type(x)
Out[4]: bytes

In [5]: type(y)
Out[5]: bytes
根据报告:

字节文本总是以“b”或“b”作为前缀;它们生成字节类型而不是str类型的实例。它们只能包含ASCII字符;数值大于等于128的字节必须用转义符表示


因此,只要unicode字符串中的所有字符都是ASCII,它们将被视为相同的字符

不管它值多少钱,
b'ABC'=='ABC'.encode(“ascii”)
返回
True
。您应该强调,它们唯一等效的实例是unicode字符串中的所有字符都是ascii的子集。另外,请记住,从技术上讲,仅由ascii字符表示的转义字符可能仍然表示无法编码为ascii的非ascii字符。