译码ASCII时,奇偶校验位是不是应该故意省略?
When decoding ASCII, should the parity bit be deliberately omitted?
根据维基百科,ASCII 是一种 7 位编码。由于每个地址(当时和现在)都存储 8 位,因此无关的第 8 位可以用作奇偶校验位。
The committee voted to use a seven-bit code to minimize costs
associated with data transmission. Since perforated tape at the time
could record eight bits in one position, it also allowed for a parity
bit for error checking if desired.[3]:217, 236 §5 Eight-bit machines
(with octets as the native data type) that did not use parity checking
typically set the eighth bit to 0.
似乎没有规定存储ASCII字符的字节中的第8位必须为0。那么,在解码ASCII字符时,我们是否需要考虑第8位可能被设置为1的可能性? Python 似乎没有考虑到这一点——应该吗?或者我们保证奇偶校验位始终为 0(根据某些官方标准)?
例子
如果校验位为0(默认),那么Python可以解码一个字符('@'):
int('0b01000000', 2).to_bytes(1, byteorder='little').decode("ascii")
# Outputs: '@'
但是如果校验位设置为1,则byte.decode
失败:
int('0b11000000', 2).to_bytes(1, byteorder='little').decode("ascii")
""" Outputs:
Traceback (most recent call last):
File "<pyshell#61>", line 1, in <module>
int('0b11000000', 2).to_bytes(1, byteorder='little').decode("ascii")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc0 in position 0: ordinal not in range(128)
"""
但是第 8 位的值应该无关紧要,因为 ASCII 只使用 7 位。注意:我不是在问如何使 byte.decode
使用非零奇偶校验位,而是在询问解码器是否应明确忽略它。
可以设置奇偶校验位这一事实只是一种观察,而不是普遍遵循的协议。话虽如此,据我所知,在解码 ASCII 时没有任何编程语言真正关心奇偶校验。如果设置了最高位,则该数字将被简单地视为 >=128
,这超出了已知 ASCII 字符的范围。
根据维基百科,ASCII 是一种 7 位编码。由于每个地址(当时和现在)都存储 8 位,因此无关的第 8 位可以用作奇偶校验位。
The committee voted to use a seven-bit code to minimize costs associated with data transmission. Since perforated tape at the time could record eight bits in one position, it also allowed for a parity bit for error checking if desired.[3]:217, 236 §5 Eight-bit machines (with octets as the native data type) that did not use parity checking typically set the eighth bit to 0.
似乎没有规定存储ASCII字符的字节中的第8位必须为0。那么,在解码ASCII字符时,我们是否需要考虑第8位可能被设置为1的可能性? Python 似乎没有考虑到这一点——应该吗?或者我们保证奇偶校验位始终为 0(根据某些官方标准)?
例子
如果校验位为0(默认),那么Python可以解码一个字符('@'):
int('0b01000000', 2).to_bytes(1, byteorder='little').decode("ascii")
# Outputs: '@'
但是如果校验位设置为1,则byte.decode
失败:
int('0b11000000', 2).to_bytes(1, byteorder='little').decode("ascii")
""" Outputs:
Traceback (most recent call last):
File "<pyshell#61>", line 1, in <module>
int('0b11000000', 2).to_bytes(1, byteorder='little').decode("ascii")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc0 in position 0: ordinal not in range(128)
"""
但是第 8 位的值应该无关紧要,因为 ASCII 只使用 7 位。注意:我不是在问如何使 byte.decode
使用非零奇偶校验位,而是在询问解码器是否应明确忽略它。
可以设置奇偶校验位这一事实只是一种观察,而不是普遍遵循的协议。话虽如此,据我所知,在解码 ASCII 时没有任何编程语言真正关心奇偶校验。如果设置了最高位,则该数字将被简单地视为 >=128
,这超出了已知 ASCII 字符的范围。