Size: a a a

2021 November 26

nx

neumond x in SPb Python
Изи. Всё питон умеет.
источник

SK

Sergio Keler in SPb Python
Когда декодер натыкается на не-ASCII-символ, он обрабатывает декодирование в соответствии с выбранным обработчиком ошибок. В этом случае обработчик ошибок surrogateescape заменяет байт отдельным суррогатным кодом в диапазоне от U + DC80 до U + DCFF.

То есть, можно натянуть свой обработчик как-то.
источник

nx

neumond x in SPb Python
Нене, тут без всяких обработчиков и уникодов.
источник

nx

neumond x in SPb Python
Тупо байтики
источник

nx

neumond x in SPb Python
Хотя вот это видимо объясняет странное число DC00
источник

SK

Sergio Keler in SPb Python
как вариант.
хотя странный хак при os.walk ещё и os.listdir использовать
источник

nx

neumond x in SPb Python
os.walk тоже умеет в байты если опять же, аргумент байтами передать
источник

SK

Sergio Keler in SPb Python
>>> for r,d,f in os.walk(b'.'):
...     for x in f:
...             print(x.decode('koi8-r'))
...
test.py
1
Хороший-файл-2
0
Хороший-файл-1
источник

SK

Sergio Keler in SPb Python
ага
источник

SK

Sergio Keler in SPb Python
Кошмар как заумно всё.
источник

SK

Sergio Keler in SPb Python
но так ладно. тогда проще.
ок, будем знать, что в os.walk можно не строку, а байтики дать. Тогда будет байтики возвращать.
источник

nx

neumond x in SPb Python
Я вообще всю жизнь думал что ФС знает кодировку в которой записаны имена файлов..
источник

nx

neumond x in SPb Python
Вот теперь ещё интересно, argv наверное так же декодируются.
источник

SK

Sergio Keler in SPb Python
Неа. Предполагает, да, но не знает. Это прикладного уровня тема. Оси пофиг и ФС пофиг на символы в названиях файлов.
Более того, "расширение" файла -- это просто часть имени и не имеет для ФС вообще никакого значения.
источник

nx

neumond x in SPb Python
>>> python t.py (echo "Хороший-файл" | iconv -f utf8 -t koi8-r)
['t.py', '\udce8\udccf\udcd2\udccf\udcdb\udcc9\udcca-\udcc6\udcc1\udcca\udccc']

Хех, тоже декодирует
источник

SK

Sergio Keler in SPb Python
touch "п╜я┌п╬-я-уникод$(echo бнопня|iconv -f utf8 -t koi8-r)"
-rw-r--r-- 1 root root   0 Nov 26 00:14 п╜я┌п╬-я-уникод??????
источник

SK

Sergio Keler in SPb Python
грамотно было бы написать surrogateescape свой
источник

nx

neumond x in SPb Python
> On Unix, command line arguments are passed by bytes from OS. Python decodes them with filesystem encoding and “surrogateescape” error handler. When you need original bytes, you can get it by [os.fsencode(arg) for arg in sys.argv].
источник

nx

neumond x in SPb Python
Это тоже можно победить.
источник

nx

neumond x in SPb Python
>>> os.fsencode('\udce8\udccf\udcd2\udccf\udcdb\udcc9\udcca-\udcc6\udcc1\udcca\udccc')
b'\xe8\xcf\xd2\xcf\xdb\xc9\xca-\xc6\xc1\xca\xcc'

А, ну собственно вот оно, это преобразование.
источник