Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 7, 2016 15:03:52

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как сохранить файл в кириллице?

doza_and
Команду вы какую выполнили?
выполнил
dir *.* >1
файл 1 создался и в нем:
 ’®¬ ў гбва®©б⢥ C ­Ґ Ё¬ҐҐв ¬ҐвЄЁ.
‘ҐаЁ©­л© ­®¬Ґа ⮬ : F08C-AB9F

‘®¤Ґа¦Ё¬®Ґ Ї ЇЄЁ C:\Documents and Settings\a

07/02/2016 16:41 <DIR> .
07/02/2016 16:41 <DIR> ..
04/02/2016 17:25 <DIR> .idlerc
31/01/2016 20:50 <DIR> .PyCharm50
01/04/2015 08:46 <DIR> .smplayer
07/02/2016 16:41 0 1
05/02/2016 11:42 0 l
22/03/2015 17:26 <DIR> ѓ« ў­®Ґ ¬Ґ­о
17/01/2015 12:39 <DIR> €§Ўа ­­®Ґ
04/02/2016 21:31 <DIR> Њ®Ё ¤®Єг¬Ґ­вл
04/02/2016 11:03 <DIR> ђ Ў®зЁ© бв®«
2 д ©«®ў 0 Ў ©в
9 Ї Ї®Є 7я042я527я232 Ў ©в бў®Ў®¤­®
dir на экране выдает то же самое, но вместо абракадабры
 
22/03/2015 17:26 <DIR> Главное меню
17/01/2015 12:39 <DIR> Избранное
04/02/2016 21:31 <DIR> Мои документы
04/02/2016 11:03 <DIR> Рабочий стол

Отредактировано andrei186 (Фев. 7, 2016 15:52:56)

Офлайн

#2 Фев. 7, 2016 15:15:20

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как сохранить файл в кириллице?

в консоли

'ффф'
дает
'\xe4\xe4\xe4'

u'ффф'
дает
u'\u0444\u0444\u0444'

Отредактировано andrei186 (Фев. 7, 2016 15:15:48)

Офлайн

#3 Фев. 7, 2016 16:39:44

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как сохранить файл в кириллице?

Если это имеет отношение к вопросу.
В IDLE:

>>> print sys.getdefaultencoding()
ascii
>>> print locale.getpreferredencoding()
cp1251
>>> print sys.stdout.encoding
cp1251
В консоли первые два такие же, но третий вместо cp1251 выдает cp866

Офлайн

#4 Фев. 7, 2016 18:51:03

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как сохранить файл в кириллице?

andrei186
но вместо абракадабры
Вот отлично, вы приближаетесь к сути вопроса. Разные устройства, cmd, notepad, notepad++ … берут поток байт, что-то предполагают о кодировке и преобразуют это дело в пиксели на экране. cmd и ваш текстовый редактор сейчас похоже имеют разное мнение о том как показывать ОДИНАКОВЫЕ данные. Любой нормальный текстовый редактор можно попросить изменить мнение о кодировке исходных данных (консоль кстати тоже можно попросить изменить текущую кодировку).

Попробуйте разные кодировки, первая строчка будет видна когда кодировка совпадет с мнением ОС о том как надо выводить в консоль. Имя вашего файла будет видно когда кодировка совпадет с кодировкой в которой вы умудрились вывести название.

Может вам поможет.
Если вы WINDOWS не курочили, то по идее
в консоли кодировка cp866
всяческие виндовые текстовые редакторы делают файлы в cp1251
Продвинутые редакторы обычно сохраняют utf-8 поскольку она более перспективна.
Очень продвинутые даже в utf-8 добавят никого не спрашивая BOM.

p.s.
Вы не находите что мой первый совет перекодировать все в латиницу и не напрягаться с русскими именами файлов имел право на жизнь? Вы тут третий день меж трех сосен ходите, а могли уже давно нужный вам алгоритм написать. Ну да конечно, если файл надо будет класть в папку Мои Документы то это не прокатит, но так ли это существенно?



Отредактировано doza_and (Фев. 7, 2016 18:59:05)

Офлайн

#5 Фев. 7, 2016 20:32:31

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как сохранить файл в кириллице?

doza_and
Вы не находите что мой первый совет перекодировать все в латиницу и не напрягаться с русскими именами файлов имел право на жизнь? Вы тут третий день меж трех сосен ходите…совпадет с кодировкой в которой вы умудрились вывести название
Не нахожу. А нахожу, что прежде чем подозревать собеседника в идиотизме, бывает полезно, поинтересоваться почему предложенное Вами решение не подходит.
Во-первых, для работы с кириллицей перекодировать ничего не надо - с латиницей все и так работает.
Во-вторых, в этой программе клиент производит какие-то действия, затем вводит свое имя, и его результат запоминается в файл под этим именем. Вы имеете в виду предлагать клиентам вводить свои имена по-английски?
3. Я все файлы делаю в родном питоновском IDLE, в котором Default Source Encoding установлен в UTF-8.
Поэтому можно не заниматься исследование кодировок всевозможных редакторов, а состелоточиться на IDLE, у которого скорее всего либо ср1251 либо ср 866. Что Вы предложите для двух этих вариантов?
4. За предложение написАть мне алгоритм спасибо, но мне неинтересно получить рыбу. Мне интересно получить удочку

ПС. "
doza_and
Вы тут третий день меж трех сосен ходите…совпадет с кодировкой в которой вы умудрились вывести название
Я не “умудрялся”, я просто ставлю курсор в поле формы и жму клавиши. Но в ваших словах чувствуется раздражение - если это так, то не затрудняйтесь отвечать. С вашей помощью или без оной, решение я найду

Отредактировано andrei186 (Фев. 7, 2016 20:33:24)

Офлайн

#6 Фев. 7, 2016 21:47:28

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как сохранить файл в кириллице?

andrei186
Но в ваших словах чувствуется раздражение
Вы ошибаетесь, я вижу что вы хотите разобраться, поэтому и стараюсь подсказать.
andrei186
Во-вторых, в этой программе клиент производит какие-то действия, затем вводит свое имя,
Очень хорошо что затронута тема, для чего это нужно.
Вы наверное не уловили суть транслитерации. Вводить данные можно и по русски. Транслитерированный текст переводится в английские буквы по принципу как слышится так и пишется. Так что фамилии останутся понятными но конечно несколько хуже чем в исходном варианте. Поэтому все ваши проблемы с кириллицей уйдут. Но конечно не полностью. Для транслитерации надо знать исходный язык. По этим причинам, как вы правильно заметили только этого будет недостаточно для нормальной системы.

Я неоднократно писал на форуме, что с русскими названиями файлов, пробелами в именах и прочей экзотикой под windows возникает куча проблем. Это может быть не связано с вашим кодом. Папка с данными может не архивироваться, можно создать файл который не будет удаляться пользователь может придумать такое имя, которое недопустимо для имени файла и т.п. Поэтому привязывать имена файлов к фамилиям пользователей мне кажется неудачной идеей. Транслитерация один из путей обхода этой проблемы.

andrei186
3. Я все файлы делаю в родном питоновском IDLE, в котором Default Source Encoding установлен в UTF-8.
Поэтому можно не заниматься исследование кодировок всевозможных редакторов, а состелоточиться на IDLE, у которого скорее всего либо ср1251 либо ср866. Что Вы предложите для двух этих вариантов?
Я IDLE не использую, как думаю и большинство участников форума, поэтому если вы намереваетесь использовать только этот редактор, то вам с ним и разбираться. Из общих соображений Default Source Encoding - должно влиять на создаваемые новые файлы. Практически наверняка существующие файлы открываются в кодировке указанной в строке
# -*- coding: utf-8 -*-
Если ее нет, то ср1251.

Так что наиболее вероятный ответ на ваш вопрос, ни ср1251 ни ср866 а utf-8.

Не удержусь от совета, используйте инструменты которые позволят вам однозначно понимать в какой кодировке вы открыли файл. Тогда вам не надо будет на форуме спрашивать в какой кодировке вы у себя создаете файлы.



Отредактировано doza_and (Фев. 7, 2016 21:58:52)

Офлайн

#7 Фев. 7, 2016 22:42:22

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как сохранить файл в кириллице?

doza_and
Вы наверное не уловили суть транслитерации.
Уловил, и это похоже на подпорки, как в известной карикутуре Качели
http://teambook.ru/wp-content/uploads/2010/07/1-work.gif
Я всеж хотел сначала попробовать это сделать без костылей и подпорок. Ну а если не получится, тогда придется подпирать.
doza_and
используйте инструменты которые позволят вам однозначно понимать в какой кодировке вы открыли файл. Тогда вам не надо будет на форуме спрашивать в какой кодировке вы у себя создаете файлы.
Я считал, что встроенный редактор IDLE как раз и есть такой инструмент, и я им пользуюсь, хотя в смысле интерфейса пользователя он полный отстой

doza_and
Из общих соображений Default Source Encoding - должно влиять на создаваемые новые файлы. Практически наверняка существующие файлы открываются в кодировке указанной в строке
# -*- coding: utf-8 -*-.
В Питон я пришел из мира, где Default Source Encoding означает Default Source Encoding. Кодировка по умолчанию. Вы имеете в виде, что в Питоне это может значить что угодно?
Насчет # -*- coding: utf-8 -*- тут рядом мне рекомендовали # coding: utf-8 - в чем разница?

doza_and
с русскими названиями файлов, пробелами в именах и прочей экзотикой под windows возникает куча проблем
Я считал, что в лицензионных локализованных виндах проблем с русскими именами файлов нет если не с W95, то c W2000 точно. По кр мере я с таковыми ни разу не сталкивался. Хотя важные файлы держу в латинице на случай, если флешку с ними придется воткнуть в нерусифицированный компьютер.
doza_and
Так что наиболее вероятный ответ на ваш вопрос, ни ср1251 ни ср866 а utf-8.
В свете вышеизложенного в каком виде я должен передать функции save() кириллическую строку?

Отредактировано andrei186 (Фев. 7, 2016 22:48:09)

Офлайн

#8 Фев. 8, 2016 01:44:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как сохранить файл в кириллице?

andrei186
в консоли
'ффф'
дает
'\xe4\xe4\xe4'
Ясно, у тебя обычный второй питон в обычной винде с обычными настройками.

Этот код
>>> 'ффф'.encode('utf-8').decode('cp1251')
'ффф'
>>>
для третьего питона.
Поэтому ты запустил код для третьего на втором, да ещё и в винде, где другие кодировки по умолчанию.

Поставь себе третий питон, тебе всё равно, какой у тебя питон. Все эти проблемы с кодировками характерны именно для второго питона.
IDLE не нужно использовать, это среда только для ознакомления с интерпретатором, не более.

andrei186
Насчет # -*- coding: utf-8 -*- тут рядом мне рекомендовали # coding: utf-8 - в чем разница?
Ни в чём. Первое используется для редакторов, чтобы они могли легче находить эту строку и выделять её или ещё что-нибудь делать. Для самого питона эти строки одинаковые.

andrei186
В Питон я пришел из мира, где Default Source Encoding означает Default Source Encoding.
Ты пришёл из мира винды, и в этом твоя проблема. В самой винде проблема с кодировками, потому что она до сих пор использует однобайтовые кодировки из прошлого века. Везде уже давно принято использовать кодировки, покрывающие весь юникод.



Отредактировано py.user.next (Фев. 8, 2016 01:53:28)

Офлайн

#9 Фев. 8, 2016 10:38:37

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

Как сохранить файл в кириллице?

py.user.next
Ясно, у тебя обычный второй питон в обычной винде с обычными настройками
Дык я еще в начале сказал, что у меня Питон 2.7 на Виндах

py.user.next
Этот код
>>> 'ффф'.encode('utf-8').decode('cp1251')
'ффф'
>>>
для третьего питона.
Поэтому ты запустил код для третьего на втором, да ещё и в винде, где другие кодировки по умолчанию.
Этт код вернул мне
  'ффф'.encode('utf-8').decode('cp1251')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf4 in position 0: ordinal not in range(128)

py.user.next
Поставь себе третий питон, тебе всё равно, какой у тебя питон.
Не все равно. Питон, подражая Биллу Гейтсу, забил на обратную совместимость. Основной код писал не я, мне надо только чуть-чуть подогнать его под свои нужды. А переносить его на П3, при моем мизерном знании страшновато
py.user.next
IDLE не нужно использовать, это среда только для ознакомления с интерпретатором, не более.
Т.е. парни, которые придумали Питон, ничего в Питоне не понимают и будучи не в состоянии сделать для него приличный редактор, вынуждены в официальный дистрибутив Питона включить отстой?
Из Вашего опыта который редактор посоветуете для Виндов? Я попробовал кой-то Pythonwin, но как только я в нем открыл и сохранил ранее работявший файл, он начал выдавать кучу ошибок о неожиданных отступах
py.user.next
Ты пришёл из мира винды, и в этом твоя проблема.
А кому щас легко?! У нас 90% подсажены на Винду, и агитировать их за Линукс выше моей компетенции

Отредактировано andrei186 (Фев. 8, 2016 11:10:39)

Офлайн

#10 Фев. 8, 2016 12:17:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как сохранить файл в кириллице?

andrei186
Дык я еще в начале сказал, что у меня Питон 2.7 на Виндах
Бывает, что говорят про второй питон, а там несколько питонов. То есть ты не сказал, что третьего нет.

andrei186
Не все равно. Питон, подражая Биллу Гейтсу, забил на обратную совместимость.
Питон - развивающийся язык. Там даже стандартов нет, потому что его кардинально могут менять. Если сравнивать второй и третий, то очень много лажи удалили из питона, прямо из ядра. Обратная совместимость требовала бы сохранения всего этого и ещё исправления багов в этом. Там очень много делают экспериментов, поэтому те части, которые оказались провальными, не сохраняют, а вычищают.

andrei186
Основной код писал не я, мне надо только чуть-чуть подогнать его под свои нужды.
Значит, используй везде юникодовые строки u'abc', во всех файлах исходного кода сверху ставь объявление кодировки, которое соответствует той кодировке, в которой сам файл. В консоль можешь выводить только те символы, которые есть в cp1251.

andrei186
Т.е. парни, которые придумали Питон, ничего в Питоне не понимают и будучи не в состоянии сделать для него приличный редактор, вынуждены в официальный дистрибутив Питона включить отстой?
Так там есть и черепашка (turtle), которой точно так же никто не пользуется.

andrei186
Из Вашего опыта который редактор посоветуете для Виндов?
Вообще, Notepad++ есть, довольно старый и проверенный. Сейчас популярность набирает Sublime Text - это что-то вроде Emacs'а, только для тупых :) , к тому же платный.
Центровые редакторы - это Vim и Emacs, но их надо плотно изучать, чтобы просто пользоваться. Зато КПД потом растёт в геометрической прогрессии, так как они очень удобные.
У меня везде Emacs сейчас.



Прикреплённый файлы:
attachment emacs-windows.png (78,0 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version