Re[2]: [Python] PyYAML, проблема с кодировкой
От: Critical Error ICQ: 123736611
Дата: 20.05.09 05:30
Оценка: :))) :)
Здравствуйте, Буравчик, Вы писали:

Б>Потому что даже Python стесняется употреблять пАдонковский сленг.


# -*- coding: cp1251 -*-

from yaml import *
s = dump(u"Я помню чудное мгновенье...".split(), encoding=None)
print repr(s)


Так тоже не работает...
Re: [Python] PyYAML, проблема с кодировкой
От: neFormal Россия  
Дата: 20.05.09 08:27
Оценка: 2 (1)
Здравствуйте, Critical Error, Вы писали:

CE>Пытаюсь сохранить в yml файл русский текст, PyYAML сохраняет, но русские буквы преобразовываются в коды символов, что не есть гут.


# -*- coding: cp1251 -*-

from yaml import *
s = dump("Я помню чудное мгновенье...".split(), encoding='UTF-8', allow_unicode=True)
print s


результат:
[!!python/str 'Я', !!python/str 'помню', !!python/str 'чудное', !!python/str 'мгновенье...']


с repr(s) разбираться было влом
надеюсь, этот кусок кода поможет..

CE>Что я делаю не так?


игнорируешь исходники.. в питоне много чего передаётся доп.параметрами.. >_>
...coding for chaos...
Re: [Python] PyYAML, проблема с кодировкой
От: Буравчик Россия  
Дата: 20.05.09 05:21
Оценка: -1
Здравствуйте, Critical Error, Вы писали:

CE>Пытаюсь сохранить в yml файл русский текст, PyYAML сохраняет, но русские буквы преобразовываются в коды символов, что не есть гут.


CE>from yaml import *

CE>s = dump([u'Превед', u'Медвед'], encoding=None)
CE>print repr(s)
CE>[/code]

CE>Результат:

CE>
CE>u'["\\u041F\\u0440\\u0435\\u0432\\u0435\\u0434", "\\u041C\\u0435\\u0434\\u0432\\u0435\\u0434"]\n'
CE>


Потому что даже Python стесняется употреблять пАдонковский сленг.

P.S. Извиняюсь за оффтоп.
... << RSDN@Home 1.2.0 alpha 4 rev. 1136>>
Best regards, Буравчик
[Python] PyYAML, проблема с кодировкой
От: Critical Error ICQ: 123736611
Дата: 20.05.09 04:55
Оценка:
Пытаюсь сохранить в yml файл русский текст, PyYAML сохраняет, но русские буквы преобразовываются в коды символов, что не есть гут.

Вот код:
# -*- coding: cp1251 -*-

from yaml import *
s = dump([u'Превед', u'Медвед'], encoding=None)
print repr(s)


Результат:
u'["\\u041F\\u0440\\u0435\\u0432\\u0435\\u0434", "\\u041C\\u0435\\u0434\\u0432\\u0435\\u0434"]\n'


Должно быть:
u'["Превед", "Медвед"]\n'


Что я делаю не так?
python yaml
Re: [Python] PyYAML, проблема с кодировкой
От: SergH Россия  
Дата: 20.05.09 07:42
Оценка:
Здравствуйте, Critical Error, Вы писали:

CE>Пытаюсь сохранить в yml файл русский текст, PyYAML сохраняет, но русские буквы преобразовываются в коды символов, что не есть гут.


CE>Вот код:

CE>
CE># -*- coding: cp1251 -*-

CE>from yaml import *
CE>s = dump([u'Превед', u'Медвед'], encoding=None)
CE>print repr(s)
CE>


CE>Что я делаю не так?


Чисто интуитивно... encoding=None заменить на что-нибудь другое
Делай что должно, и будь что будет
Re[2]: [Python] PyYAML, проблема с кодировкой
От: Курилка Россия http://kirya.narod.ru/
Дата: 20.05.09 08:40
Оценка:
Здравствуйте, neFormal, Вы писали:

F>Здравствуйте, Critical Error, Вы писали:


CE>>Пытаюсь сохранить в yml файл русский текст, PyYAML сохраняет, но русские буквы преобразовываются в коды символов, что не есть гут.


F>
F># -*- coding: cp1251 -*-

F>from yaml import *
F>s = dump("Я помню чудное мгновенье...".split(), encoding='UTF-8', allow_unicode=True)
F>print s
F>


'UTF-8' и None по ходу дают аналогичный результат, соль в ключике allow_unicode видать
Re[3]: [Python] PyYAML, проблема с кодировкой
От: neFormal Россия  
Дата: 20.05.09 08:49
Оценка:
Здравствуйте, Курилка, Вы писали:

К>'UTF-8' и None по ходу дают аналогичный результат, соль в ключике allow_unicode видать


да, но encoding всё равно нужен.. я так понял, что оно внутри через utf-8 сериализует.. а флажок этот выключает сериализацию в спецсимволы:
if not self.allow_unicode:
    special_characters = True
...coding for chaos...
Re[2]: [Python] PyYAML, проблема с кодировкой
От: Critical Error ICQ: 123736611
Дата: 20.05.09 10:09
Оценка:
Здравствуйте, neFormal, Вы писали:

F>
F># -*- coding: cp1251 -*-

F>from yaml import *
F>s = dump("Я помню чудное мгновенье...".split(), encoding='UTF-8', allow_unicode=True)
F>print s
F>


CE>>Что я делаю не так?


F>игнорируешь исходники.. в питоне много чего передаётся доп.параметрами.. >_>


Благодарю! Разобрался абсолютно и полностью. Действительно, почитав сырец стало сразу понятнее (как всегда у питона исходник понятнее документации).

Если кому пригодится...

Вот так можно сохранить данные в файл в кодировке utf8:
s = u"Я помню чудное мгновенье..."
dump(s.split(), open('test.yml', 'wb'), encoding='utf8', allow_unicode=True)


А вот так в кодировке cp1251:
s = u"Я помню чудное мгновенье..."
f = open('test.yml', 'wb')
f.write(dump(s.split(), encoding=None, allow_unicode=True).encode('cp1251'))


encoding=None заставляет dump создать unicode-строку, которую можно преобразовать в любую желаемую кодировку.
Re[3]: [Python] PyYAML, проблема с кодировкой
От: Аноним  
Дата: 27.05.09 11:22
Оценка:
CE>А вот так в кодировке cp1251:
CE>
CE>s = u"Я помню чудное мгновенье..."
CE>f = open('test.yml', 'wb')
CE>f.write(dump(s.split(), encoding=None, allow_unicode=True).encode('cp1251'))
CE>


это не работает
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
f.write(dump(s.split(), encoding=None, allow_unicode=True).encode('cp1251'))
File "C:\Python25\lib\encodings\cp1251.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\xdf' in position 1: character maps to <undefined>
Re[4]: [Python] PyYAML, проблема с кодировкой
От: Critical Error ICQ: 123736611
Дата: 27.05.09 22:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>это не работает

А>Traceback (most recent call last):
А> File "<pyshell#34>", line 1, in <module>
А> f.write(dump(s.split(), encoding=None, allow_unicode=True).encode('cp1251'))
А> File "C:\Python25\lib\encodings\cp1251.py", line 12, in encode
А> return codecs.charmap_encode(input,errors,encoding_table)
А>UnicodeEncodeError: 'charmap' codec can't encode character u'\xdf' in position 1: character maps to <undefined>

Идей нет. Разве что Вы запускали из шелла, а я из файла, мб шелл во всем виноват. Полностью пример выглядит так:
# -*- coding: cp1251 -*-
from yaml import *
s = u"Я помню чудное мгновенье..."
f = open('test.yml', 'w')
f.write(dump(s.split(), encoding=None, allow_unicode=True).encode('cp1251'))
Re[5]: [Python] PyYAML, проблема с кодировкой
От: neFormal Россия  
Дата: 28.05.09 08:03
Оценка:
Здравствуйте, Critical Error, Вы писали:

А>>это не работает

А>>UnicodeEncodeError: 'charmap' codec can't encode character u'\xdf' in position 1: character maps to <undefined>

CE>Идей нет. Разве что Вы запускали из шелла, а я из файла, мб шелл во всем виноват. Полностью пример выглядит так:


скорее различие в операционке или версии yaml-a..
у меня линух и 3.0.6, не работает..
...coding for chaos...
Re[6]: [Python] PyYAML, проблема с кодировкой
От: Critical Error ICQ: 123736611
Дата: 28.05.09 12:16
Оценка:
Здравствуйте, neFormal, Вы писали:

F>скорее различие в операционке или версии yaml-a..

F>у меня линух и 3.0.6, не работает..

Может и такое... У меня так:

c:\TEMP>python
ActivePython 2.6.1.1 (ActiveState Software Inc.) based on
Python 2.6.1 (r261:67515, Dec  5 2008, 13:58:38) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
>>> yaml.__version__
'3.08'
>>>


На Python 2.5 тоже работает...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.