Unicode
Это происходит постоянно с распределением символов в Unicode .Например, символы были добавлены в Unicode v12.0 в апреле 2019 года, включая зевающее лицо, ?
(кодовая точка 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)