Unicode
unicode 中的字符分配总是会发生这种情况。例如,Unicode v12.0 于 2019 年 4 月添加了字符,包括打哈欠的脸、?(代码点 1F971)、导盲犬(代码点 1F9AE)、? 和溜溜球?(代码第 1FA80 点)。根据您的浏览器和操作系统版本,您可能会将这些视为表情符号,也可能不会。
互联网上最常用的编码方案是UTF-8,这是几种Unicode编码之一。
ASCII
ASCII,作为一种编码,是 7 位的,涵盖值 0-127。如果您尝试将超出该范围的字符解码为 ASCII,则错误将取决于实现。例如,“A”同时使用 ASCII(7 位)和 LATIN1(8 位),而“¡”仅使用 LATIN1。在python中,这会产生错误:
# script.py
import binascii
def encode_binary(input, encoding):
return bin(int.from_bytes(input.encode(encoding), 'big'))
print(encode_binary('A', 'utf8'))
print(encode_binary('A', 'latin1'))
print(encode_binary('A', 'ascii'))
print() # print a newline
print(encode_binary('¡', 'utf8'))
print(encode_binary('¡', 'latin1'))
print(encode_binary('¡', 'ascii'))
--------
$ python script.py
0b1000001
0b1000001
0b1000001
0b1100001010100001
0b10100001
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\u00a1' in position 0: ordinal not in range(128)