zmeykin
Но всеравно у меня появляеться строка в utf-8 символах. Пример во вложении.
Это не utf-8, это Юникод. Если бы там было utf-8, то кириллические символы занимали бы по два байта.
Если ты не в курсе, utf-8 - это одна из кодировок, которая отображает байтовые последовательности на Unicode. Есть ещё кодировки utf-16 и utf-32, которые тоже отображают байтовые последовательности на Unicode. А кириллические символы находятся в самом Юникоде. Юникод - это такое множество чисел, около миллиона их, где большинству чисел соответствуют изображения символов со всего мира. Многие числа являются служебными, а многие вообще не заняты ничем. И вот кодировка utf-8 просто даёт возможность ссылаться на любое число в Юникоде.
Вот в питоне запись вида ‘\u1234’ - это именно прямая ссылка на число в Unicode, без каких либо кодировок. Поэтому русские буквы в питоне пишутся напрямую, так же как и китайские иероглифы (они тоже есть в Юникоде, причём все 100000, как и корейские).
Китайский иероглиф 我 (wo3) переводится как “я”
>>> '\u6211'
'我'
>>> '我'
'我'
>>>
>>> '\u042f'
'Я'
>>> 'Я'
'Я'
>>>
Так вот символы, закодированные в utf-8, не всегда совпадают с их кодами в Unicode.
Пример по букве “Я”
>>> '\u042f'
'Я'
>>> 'Я'
'Я'
>>> 'Я'.encode('utf-8')
b'\xd0\xaf'
>>>
В виде кода Юникода буква “Я” является одним числом, а в виде закодированной в utf-8 последовательности буква “Я” является двумя числами, причём вообще другими.
Числа в utf-8 и в Юникоде совпадают только в начале, так как в начале Юникода находится ASCII.
>>> '\u0040'
'@'
>>> '@'.encode('utf-8')
b'@'
>>> hex(_[0])
'0x40'
>>>