Доза Telnetlib3 не хочет использовать кодировку UTF-8Python

Программы на Python
Anonymous
Доза Telnetlib3 не хочет использовать кодировку UTF-8

Сообщение Anonymous »

Я пытался реализовать сервер telnet с telnetlib3 в python. Но все работает нормально, пока я не начну использовать какой-нибудь символ кодировки UTF-8, и в этот момент он сломается.
Вот мой простой макетный сервер для проверки этой проблемы
import asyncio
import telnetlib3

async def shell(reader, writer):
writer.encoding = 'utf-8'
writer.write('ดีคับ\n')
writer.write('Type "exit" to close the connection.\n')

while True:
writer.write('> ')
inp = await reader.read(1024)
if not inp:
break

inp = inp.strip()
if inp.lower() == 'exit':
break

writer.write(f'You said: {inp}\n')

writer.write('Goodbye!\n')
writer.close()

if __name__ == "__main__":
loop = asyncio.get_event_loop()
server = telnetlib3.create_server(port=8023, shell=shell, host='0.0.0.0', encoding='utf-8')
loop.run_until_complete(server)
loop.run_forever()


Я попытался указать кодировку в server = telnetlib3.create_server(port=8023,shell=shell,host='0.0.0.0',coding='utf-8')
code>, конечно, я пробую и «utf-8», и «utf8». Но telnetlib3 по-прежнему использует кодировщик ascii для кодирования строки.
Вот ошибка (после того, как я явно определил кодировщик utf-8)
Task exception was never retrieved
future:
Traceback (most recent call last):
File "/home/rinz/dev/test.py", line 6, in shell
writer.write('ดีคับ\n')
File "/home/rinz/dev/.venv/lib/python3.12/site-packages/telnetlib3/stream_writer.py", line 2614, in write
self._write(self.encode(string, errors))
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/rinz/dev/.venv/lib/python3.12/site-packages/telnetlib3/stream_writer.py", line 2594, in encode
return bytes(string, encoding, errors or self.encoding_errors)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)


Подробнее здесь: https://stackoverflow.com/questions/787 ... 8-encoding

Вернуться в «Python»