Найти - Пользователи
Полная версия: Проблема с кодировкой русских имен файлов в массиве.
Начало » Python для новичков » Проблема с кодировкой русских имен файлов в массиве.
1
winmasta
Всем добрый день. Имеется папка с тремя файлами, в двух из них есть русские буквы. Однако

 print(listdir(mypath))

выдает в консоль

 ['sfsdfsd', 'sfsdfsd (\xd0\xba\xd0\xbe\xd0\xbf\xd0\xb8\xd1\x8f)', 'sfsdfsd (\xd0\xb4\xd1\x80\xd1\x83\xd0\xb3\xd0\xb0\xd1\x8f \xd0\xba\xd0\xbe\xd0\xbf\xd0\xb8\xd1\x8f)']

но

 for item in listdir(mypath):
    print(item)

замечательно отображает

 sfsdfsd
sfsdfsd (копия)
sfsdfsd (другая копия)

Этот массив я в итоге передаю через TCP сокет и на другой стороне пишу в файл, и там тоже русские буквы не отображаются. Как это побороть ?
py.user.next
Поставь третий питон.
winmasta
Да в третьем питоне проблема выше ушла, но вылезла следующая.
d - словарь

 print(d)

дает

 {'size': '10', 'time': '2017-10-03 18:35:22.028048', 'name': 'sfsdfsd (12-я копия)'}

мне нужно сделать JSON структуру из этого словаря, я делаю с помощью json.dumps(d), но

 print(json.dumps(d))

дает опять

 {"size": "10", "name": "sfsdfsd (13-\u044f \u043a\u043e\u043f\u0438\u044f)", "time": "2017-10-03 18:37:25.856247"}
Slow
kwarg ensure_ascii для json.dumps и кодек в нужную кодировку могли бы вам помочь
doza_and
Slow
kwarg ensure_ascii для json.dumps и кодек в нужную кодировку могли бы вам помочь
Нет не помогут. Проблема не в языке а в пользователе который должен понять что это нормальный результат, который полностью соответствует спецификации модуля.
winmasta
ушла, но вылезла следующая.
Почему вы считаете что это проблема? Считайте данные назад. Читаются?
winmasta
Данные конечно читаются, но как их прекодировать в “читаемую” кодировку. Я понимаю, что результат нормальный, нужно при сохранении в файл перекодировать но как ?
doza_and
winmasta
но как их прекодировать в “читаемую” кодировку
Перекодировать в кодировку :)?
Кодировка у них 7 бит (ascii) - только латиница. Так что это как раз читается везде и однозначно. Не латиница описана числовыми кодами. Так что это к вам вопрос как вы этот обычный текст хотите закодировать.

Я рекомендую кодировать в utf-8. Мотивы легко нагуглите по utf-8 vs….
https://docs.python.org/3/library/json.html
 with open(file_name, "w", encoding="utf-8") as f:
    json.dump(obj, f, ensure_ascii=False)
Что вы при этом увидите зависит от того чем смотрите. Про это вы ни слова не написали. Подойдут нормальные редакторы типа sumlime, emacs, vim, notepad++.
winmasta
doza_and
ensure_ascii=False)
Спасибо, это именно то, что я искал.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB