Python не сохраняет кириллицу

Python + кириллица?

Ситуация: есть консольное приложение на Python (версия 2.7). В ходе работы приложение должно выводить (считывать не нужно, уж не знаю, важно ли это) данные в консоль, в том числе текст на русском языке. Проблема

def __str__(self): return "%s |(%s)|" % (self.name, self.id)

вот self.name — строка, в которой могут быть русские символы.

Без каких либо преобразований вообще — вылетает ошибка:

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-4: ordinal not in range(128)

def __str__(self): return "%s |(%s)|" % (repr(self.name.encode("UTF-8")), self.id)

то исключение не вылетает, но на консоль выводятся не кириллические символы, а их байтовая репрезентация.

‘\xd0\x95\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb0 S.’ |(157927927)|

Как решать такую проблему? С латиницей проблем нет, тот же код выводит не байтовую репрезентацию, а нормальные латинские символы символы.

Что кстати можно почитать по этому поводу?

#!/usr/bin/env python # -*- coding: utf-8 -*- class Foo(object): def __init__(self, name): self.name = name def __str__(self): return 'str: %s' % self.name def __unicode__(self): return 'uni: %s' % self.name.decode('utf-8') def __repr__(self): return 'repr: %s' % self.name a = 'Елена S' b = Foo(a) print(str(b)) print(unicode(b)) print(repr(b)) 

Вы правы, такой код действительно работает, вот только я забыл уточнить, что информация и приходит в «байтовой репрезентации» от источника (twitter json).

Дорогой автор !
я долго размышлял в чём дело!
пока не прочел вашу статью
versin python 2
-*- coding: utf-8 -*-
слово=»слова»
print ‘слово’
увы он не поддерживал модулей поддержки языков !

а проблема моя была в том что работая с программой eclipse mars все слова выводимые программой он судорожно показывал обнародовал как ошибка и выдавал № код ячейки памяти в котором хранился этот непонятный интерпритатору обьект .
помогло вот что!
sudo apt-get install python 3
и естественно смена компилятора python 2 на более позднюю версию !

@python_2_unicode_compatible class AuthorModel(models.Model):

Войдите, чтобы написать ответ

Как запустить код телеграм бота на python в pythonanywhere?

Источник

Читайте также:  Poetry env use python

Как записать текст на русском в файл UTF-8?

1. Почему файлы ‘str_ru_text_1.txt’, ‘str_ru_text_2.txt’ в кодировке Windows 1251, а файлы ‘str_en_text_1.txt’, ‘str_en_text_2.txt’ — в UTF-8?

2. Есть ли способ записать utf-8 без str.encode(‘utf-8’)?

3. Где описаны правила записи строк в файл? Где и что почитать по этой проблеме?

with open('str_ru_text_1.txt', 'rb') as f: print(f.read().decode('utf-8')) with open('str_en_text_1.txt', 'rb') as f: print(f.read().decode('utf-8'))

Оценить 2 комментария

>а файлы ‘str_en_text_1.txt’, ‘str_en_text_2.txt’ — в UTF-8?
Как ты определил по файлу с ascii символами в какой они кодировке?

lololololo: см. ветку комментариев к первому комментарию (началось с прикладного софта, закончилось подбором кодировки через decode): https://toster.ru/answer?answer_id=344879#comments_list

Товарищи, это писец какой-то. Хотели как лучше, а получилось еще более через жопу.

mode is an optional string that specifies the mode in which the file is opened. <. >In text mode, if encoding is not specified the encoding used is platform dependent: locale.getpreferredencoding(False) is called to get the current locale encoding. (For reading and writing raw bytes use binary mode and leave encoding unspecified.)

1. Если не указан режим ‘b’, то по умолчанию файл считается текстовым. В двоичный файл можно писать только байты, в текстовый — только юникод.
(В текстовом режиме файл читается только до EOF (‘\x1a’). Как совместить чтение до конца файла и запись юникода в файл? А никак.)
2. Если кодировка не указана, по умолчанию берется locale.getpreferredencoding(False), т.е. результат выполнения будет зависеть от настроек оси! (для винды — от текущей локали). Нахера. От одних граблей избавились, другие приобрели.

В общем, всегда явно указывай явно кодировку файла.

with open('str_ru_text_1.txt', 'w', encoding='utf-8') as f:

Из вопроса:
>> Python 3.4, Windows 8.1
С codecs не встречался, а с двойкой не работаю. Чем codecs.open от open отличается (в Python 3)?

Если только для двойки, то не стоит тратить время на объяснение, спасибо. А с параметром encoding еще тогда разобрались, но без источников. Спасибо за ссылку.

Источник

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Запись кириллицы в файл и чтение из него.

#1 Окт. 25, 2014 13:15:42

Запись кириллицы в файл и чтение из него.

Все здравствуйте!
Знаю, что тема уже обсуждалась много раз, но я так и не смог победить свою задачу. Если есть возможность подскажите пожалуйста как решить ее:

# -*- coding: utf-8 -*- fileName = '/Users/adam/Downloads/test.txt' data = [['Пример 1'], ['Пример 2'], ['Пример 3']] fm = open( fileName, 'wb' ) fm.write( str( data ) ) fm.close() fd = open( fileName, 'rb' ) data = fd.read() fd.close() print data 
[['\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80 1'], ['\u041f\u0440\u0438\u043c\u0435\u0440 2'], ['\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80 3']] 

Необходимо, чтобы записалось в файл на читаемом русском и так же из него считалось. Подскажите пожалуйста как это сделать?

Отредактировано Dobrodel (Окт. 25, 2014 13:16:33)

Источник

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

— не совсем так у меня сохраняется, тут не все символы отобразились.

Как правильно сохранять данные в файл с кириллицей, чтобы на выходе получался файл в котором можно редактировать эти данные максимально удобно? Ну чтобы в файле с сохраненными данными было что-то похожее на это — [«Петя», «Вася», «Оля», «Маша»]

Как записать данные в файл, и спросить у пользователя в какую директорию сохранить файл. Не используя ПХП
Вот как вводится файл, у пользователя спрашивает, в какие директории перейти, а тут наоборот, мне.

Как сохранить данные в файл.
Как сохранить данные из Edit — ов в файл на одной строчке с пропуском. Следующей строчке. .

Как сохранить данные в файл
Подскажите пожалуйста, как сохранить string в файл. String^ a = textBox1->Text; string.

Как сохранить данные в файл
Здраствуйте! Есть несколько текстовых данных около 5, которые нужно объединить и сохранить в файле.

Эксперт Python

svr,
Как верно заметил wi34rd, формат pickle не предназначен для ручного редактирования. Нужно использовать что-то типа json.

Как сохранить данные в файл.
Народ, как сохранить данные из Edit1,Edit2,Edit3 в один файл. На разных строчках.

Как сохранить данные в файл?
подскажите как в VBA код вставить данные, номер 00124124 Лицензия 1025151 (допустим) и после.

Как сохранить данные из listbox в файл
Здравствуйте, нигде не могу найти как сохранить данные из listbox в txt файл в pascal abc.net?

Как сохранить данные из DataGridView в файл
подскажите пожалуйста

Как сохранить данные массивов в файл?
Приветствую всех, У меня в программе имеется несколько таблиц, заполняемых пользователем. Мне.

Как сохранить данные из dataset в файл?
Здравствуйте , подскажите пожалуйста как можно сохранить данные из DataGrid в файл ? (Извините там.

Как сохранить данные ListBox в файл?
Если с TextBox все легко, Open "c:\count.xml" For Output As #1 Print #1, TextBox1.Text .

Источник

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » как правильно работать с кириллицей при записи в текстовый файл

#1 Май 17, 2015 22:42:30

как правильно работать с кириллицей при записи в текстовый файл

a = Строка кириллицей
print a — печатает текст
f.write(a) — шестнадцатиричные коды
Какое нужно преобразование, чтобы получить читаемый текстовый файл вместо кодов?

#2 Май 17, 2015 23:05:21

terabayt От: Киев Зарегистрирован: 2011-11-26 Сообщения: 1099 Репутация: 103 Профиль Отправить e-mail

как правильно работать с кириллицей при записи в текстовый файл

вы или текстовый файл неправильно открываете
может редактор не знает кодировку
или неправильно открываете файл для записи
скиньте файл с шестнадцатеричными кодами
и код
и напишите какая версия пайтона и ос

#3 Май 17, 2015 23:14:08

как правильно работать с кириллицей при записи в текстовый файл

Никакого. В том средстве которым файл смотрите выставьте правильную кодировку содержимого.
А вообще правило такое:
1 в начале питон скрипта указываете кодировку скрипта.

#!/usr/bin/env python # -*- coding: utf-8-*- 

При этом естественно надо следить чтобы текстовый редактор которым вы пользуетесь записал текст именно в указанной кодировке.

2. Поскольку у вас питон 2 то лучше сразу заставить питон перевести ваш строковый литерал в юникод

import codecs f=codecs.open(". ","w",encoding="utf-8") f.write(a) 

Если вы не проделаете все это явно, то питон попробует догадаться чего вы хотите на основе установок системной локали и прочих премудростей… Его мнение и ваше желание естественно могут не совпасть.

p.s.
проблема существует по большей части в windows, поскольку там разные кодировки для файлов консоли и системы. Переходите на Unix 🙂

Отредактировано doza_and (Май 17, 2015 23:22:09)

#4 Май 17, 2015 23:19:35

как правильно работать с кириллицей при записи в текстовый файл

Только сейчас другому челу объяснял. 🙂
под виндой с русской локалью:

#!/usr/bin/env python # -*- coding: utf-8 -*- import codecs a="русское" with open("aa.dat","w") as f: f.write(a) 

Пишет utf-8 (т.е. содержимое строки)

#!/usr/bin/env python # -*- coding: utf-8 -*- import codecs a=u"русское" with open("aa.dat","w") as f: f.write(a) Traceback (most recent call last): File "C:\PROJECTS\egor_petrov\mcu_new\aaa\a.py", line 7, in module> f.write(a) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128) 
#!/usr/bin/env python # -*- coding: utf-8 -*- import codecs a=u"русское" with codecs.open("aa.dat","w",encoding="utf-8") as f: f.write(a) 

опять нормально пишет utf-8

Рекомендую всегда явно указывать кодировку, причем utf-8. помогает при переносе файлов между разными ОС

Есть еще одно очень простое и очень действенное секретное средство — ВНИМАНИЕ. — начинающим рекомендую не писать по русски ни в файл ни в скрипт ни на консоль ни создавать файлы с русскими именами и упаси боже создать в винде пользователя с русским именем.

Отредактировано doza_and (Май 17, 2015 23:31:13)

Источник

Оцените статью