LINUX.ORG.RU

Достать весь список файлов с русскими символами из директории

 ,


0

1

Есть функция которая возвращает список файлов из диры:

return [f for f in listdir(path) if isfile(join(path, f))]
Если принтануть названия любого файлас русским названием получим соответственно неправильную кодировку, вопрос такой, как достать список с правильной кодировкой?

Если принтануть названия любого файлас русским названием получим соответственно неправильную кодировку

сфигали?

filename.encode('название неправильной кодировки').decode('название правильной кодировки')
anonymous
()

Наверно у него koi8r в файловой системе и скрипты в cp1251. Видимо фряха.

anonymous
()
Ответ на: комментарий от anonymous

https://pastebin.com/vKygf4GB - 63 строка
в чате бота вывод уже с некорректной кодировкой
не думаю что discord не умеет в utf-8 и вообще причем тут он

noname_user ★★★
() автор топика
Последнее исправление: noname_user (всего исправлений: 1)
Ответ на: комментарий от noname_user

Это у glibc, что там в системе наворочено никто не знает.

Для начала используй вот это https://www.python.org/dev/peps/pep-0263/

Т.е. типа такого # -*- coding: utf-8 -*-

Хотя в 3 питоне и так утф8. Сохраняй файл в утф8.

Если у тебя файловая система не юникодная, возможно придётся использовать костыли типа sys.setdefaultencoding() — чревато.

anonymous
()
Ответ на: комментарий от anonymous
Т.е. типа такого # -*- coding: utf-8 -*-

юзаю всегда

Если у тебя файловая система не юникодная, возможно придётся использовать костыли типа sys.setdefaultencoding() — чревато.
но в консоль то выводит нормально через print, а вот именно при отправке куда либо к примеру через апишку в чат дискорда, крякозябы уже (опять же не вижу в чем может не правильно работать discord api, ведь это чат)

noname_user ★★★
() автор топика
Последнее исправление: noname_user (всего исправлений: 1)
Ответ на: комментарий от noname_user

получаю начальный результат

track.encode('utf-8').decode('utf-8')

Гений, чо. 0 +2 -2 == 0.

Давай пример кракозябров.

anonymous
()
Ответ на: комментарий от anonymous

писал разрабам api, сказали там все ок, дрочи питон (разрабы либы discord.py)

noname_user ★★★
() автор топика
Ответ на: комментарий от noname_user

дак я уже все перепробовал!

Не надо всё перепробовать. Надо показать что у тебя печатается, а добрый дядя анонимус скажет, что это за кодировка. Может быть.

anonymous
()
Ответ на: комментарий от anonymous

я уже чекнул кодировку, на многих ресурсах и написал что определяет ее как ISO-8859-1 (Звонок атору статьи.mp3)

noname_user ★★★
() автор топика
Ответ на: комментарий от noname_user

Звонок атору статьи.mp3

1 же ссылка в гугле ведёт на сайт который расшифровал?

``` echo Ðвонок аÑоÑÑ ÑÑаÑÑи.mp3 |iconv -t 'iso8859-1' -f 'utf8' ```

скажи авторам твоей либы что они мудаки

anonymous
()
Ответ на: комментарий от noname_user

Звонок атору статьи.mp3

1 же ссылка в гугле ведёт на сайт который расшифровал?

echo Ðвонок аÑоÑÑ ÑÑаÑÑи.mp3 |iconv -t 'iso8859-1' -f 'utf8'

скажи авторам твоей либы что они мудаки

anonymous
()
Ответ на: комментарий от anonymous

а это даёт вот такое, там не cp1252 наверно

�iconv: недопустимая входная последовательность в позиции 2

anonymous
()
Ответ на: комментарий от anonymous
'charmap' codec can't encode character '\x92' in position 1: character maps to <undefined>
noname_user ★★★
() автор топика
Ответ на: комментарий от anonymous

решение:

track.encode('iso8859-1').decode('utf8', errors='ignore')
Спасибо

noname_user ★★★
() автор топика
Ответ на: комментарий от anonymous

точнее

iconv: недопустимая входная последовательность в позиции 0

там невидимые символы просто — у меня нормально iso8859-1 декодировалась.

Так кто виноват: в питоне iso8859-1 выставлена, в дискорде, или в фс?

anonymous
()
Ответ на: комментарий от noname_user

Не надо думать, надо проверять.
К слову, в родных линуксовых системах нет указания кодировки при монтировании и перекодирований имен файлов на лету (новомодный флаг регистронезависимости не в счет) — как записали, так и лежит, обычно считается, что в системной локали. А в iso8859-1 русских символов нет, совсем нет.

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от noname_user

Для тех случаев когда названия файлов и директорий в неизвестной кодировке, предусмотрен способ для работы с такими именами

listdir(b'path/to/dir')

Работай с ними как с bytes, все питоновские функции из стандартной библиотеки, которые работают с файлами и путями знают про эту особенность.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.