(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 04:12 pm (UTC)Ну засунул невалидную в текущей локали строку в переменную среды. А потом удивляешься, почему бедная змейса не может её скушать
``` LANG=ru_RU.CP1251 python3 -c 'import os; print(os.environ["F"])'|iconv -f cp1251
яюэ ```
no subject
Date: 2021-07-02 04:37 pm (UTC)Так она _сделала вид_, что скушала, а на самом деле подложила свинью внутреннему коду.
(Хм, питон, подкладывающий свинью...)
no subject
Date: 2021-07-02 08:09 pm (UTC)Оригінальний приклад простий і має очевидне рішення. Гірше, коли просто виводиш значення змінної середовища або їм'я файла (з os.listdir() або os.getcwd()). Це текст? Текст. Стандартний вивід приймає текст? Текст. Так де ж вказувати яке кодування щоб отримати бажаний результат?
Все ж, гадаю, в Пітоні з цим справа краще, ніж в інших мовах програмування, де або валиться до того, як користувацький код має змогу обробити помилку, або незворотньо псують дані, або залишають користувача з голим системно-залежним представленням, яке потрібно вручну декодувати перш ніж з ним можна працювати. Не ідеал, але ідеал тут взагалі неможливий.
no subject
Date: 2021-07-03 07:06 am (UTC)Змейсы они такие - начала заглотят, а потом не знают, как выплюнуть.