(no subject)
Jul. 2nd, 2021 06:04 pm$ export F=`printf "\xff\xfe\xfd"`
$ python3 -c 'import os; print(repr(os.environ["F"]))'
'\udcff\udcfe\udcfd'
$ python3 -c 'import os; print(os.environ["F"].encode())'
Traceback (most recent call last):
File "", line 1, in
UnicodeEncodeError: 'utf-8' codec can't encode characters in position 0-2: surrogates not allowed
зачем ловить медведя, если потом он тебя не отпустит?
$ python3 -c 'import os; print(repr(os.environ["F"]))'
'\udcff\udcfe\udcfd'
$ python3 -c 'import os; print(os.environ["F"].encode())'
Traceback (most recent call last):
File "
UnicodeEncodeError: 'utf-8' codec can't encode characters in position 0-2: surrogates not allowed
зачем ловить медведя, если потом он тебя не отпустит?
no subject
Date: 2021-07-02 03:20 pm (UTC)no subject
Date: 2021-07-02 03:24 pm (UTC)Но требует слишком повышенного внимания при передаче куда-то вглубь.
no subject
Date: 2021-07-02 08:09 pm (UTC)Оригінальний приклад простий і має очевидне рішення. Гірше, коли просто виводиш значення змінної середовища або їм'я файла (з os.listdir() або os.getcwd()). Це текст? Текст. Стандартний вивід приймає текст? Текст. Так де ж вказувати яке кодування щоб отримати бажаний результат?
Все ж, гадаю, в Пітоні з цим справа краще, ніж в інших мовах програмування, де або валиться до того, як користувацький код має змогу обробити помилку, або незворотньо псують дані, або залишають користувача з голим системно-залежним представленням, яке потрібно вручну декодувати перш ніж з ним можна працювати. Не ідеал, але ідеал тут взагалі неможливий.