Size: a a a

2021 November 25

SK

Sergio Keler in SPb Python
# файл называется: я┘п╬я─п╬я┬п╦п╧_я└п╟п╧п╩ - кодировка koi8-r
это утф переведённый в кои
источник

SK

Sergio Keler in SPb Python
test# python3 test.py
['test.py', '\udce8\udccf\udcd2\udccf\udcdb\udcc9\udcca-\udcc6\udcc1\udcca\udccc']
<class 'str'>
Traceback (most recent call last):
 File "test.py", line 8, in <module>
   name = f.encode('koi8-r').decode('utf-8')
 File "/usr/lib/python3.5/encodings/koi8_r.py", line 12, in encode
   return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-6: character maps to <undefined>
источник

SK

Sergio Keler in SPb Python
DC -- Это откуда такая хрень?
https://unicode-table.com/en/blocks/low-surrogates/
источник

SK

Sergio Keler in SPb Python
Как воспроизвести:
touch $(echo "Хороший-файл" | iconv -f utf8 -t koi8-r)
Это создаст файл с именем в кодировке кои8р
источник

SK

Sergio Keler in SPb Python
ls -lh | iconv -f koi8-r -t utf-8
посмотреть файлы в koi8
источник

ЕД

Евгений Демидов... in SPb Python
источник

ЕД

Евгений Демидов... in SPb Python
источник

ЕД

Евгений Демидов... in SPb Python
все равно переименовал
источник

ЕД

Евгений Демидов... in SPb Python
создавал через touch
источник

ЕД

Евгений Демидов... in SPb Python
а вот декодировать не получилось
источник

SK

Sergio Keler in SPb Python
ну да.
я примерно о том же.
строку получил, а что с ней дальше?
надо из оригинала в utf
источник

SK

Sergio Keler in SPb Python
ну хоть ренейм работает
источник

ЕД

Евгений Демидов... in SPb Python
for root, dirs, files in os.walk(b'.'):
   for f in files:
       name = f.decode('koi8-r')
       print(name)
       os.rename(f, str(count))
       count += 1
источник

ЕД

Евгений Демидов... in SPb Python
os.walk(b'путь')
источник

ЕД

Евгений Демидов... in SPb Python
у меня так работает
источник

ЕД

Евгений Демидов... in SPb Python
нашел здесь
источник

ЕД

Евгений Демидов... in SPb Python
источник

nx

neumond x in SPb Python
Сделал такой тач. Вот так получается вернуть имя:
# вот такое выдала pathlib.Path.iterdir
>>> fname = '\udce8\udccf\udcd2\udccf\udcdb\udcc9\udcca-\udcc6\udcc1\udcca\udccc'
>>> bytes([ord(c) - 0xdc00 if ord(c) > 256 else ord(c) for c in fname]).decode('koi8-r')
'Хороший-файл'
источник

nx

neumond x in SPb Python
Там каждый байт кои-8 превратился в некоторое подобие utf-8, но символы выходят далеко за пределы определённых юникодом, поэтому даже заэнкодить это в utf не получается.
источник

SK

Sergio Keler in SPb Python
Ага. Это какой-то питонский питон просто :(
источник