Characters are not bytes and bytes are not characters (not any more). The Python string type supports Unicode encodings which defines numeric values for a very large set of characters.
ASCII is a subset of Unicode but is limited to the first 127 characters.
# ASCII characters are between 32 and 127
for i in range(32,128):
print(hex(i),chr(i),end=' ')
# Unicode characters have values >128:
from random import randint
start=randint(128,20000)
for i in range(start,start+64):
print(hex(i),chr(i),end=' ')
# we can find the number (ordinal value or Unicode ''code point'') for a character
c='猫'
print(c,hex(ord(c)))
# or the character for the ordinal
print(0x732b,chr(0x732b))
# different encodings require a different number of bytes
c=chr(0x732b)
print(c,len(c),len(c.encode('utf-8')), len(c.encode('utf-16')))
print(type(c),type(c.encode('utf-8')))
# different characters are one character long
# but require different number of bytes to encode
s='RÖ猫𐒎'
for c in s:
print(c,hex(ord(c)),len(c),len(c.encode('utf-8')), len(c.encode('utf-16')))