- Python + кириллица?
- Войдите, чтобы написать ответ
- Почему Джанго не подгружает картинку в CSS и браузер выдает ошибку 404?
- VS + Python + кириллица, ошибка в консоли, как решить?
- Как заставить выводить русский текст Python?
- Python не понимает русский
- Что нас ждет в Portal for ArcGIS 10.3
- Решение проблемы с .NET при установке ArcGIS на Windows 8.1 (Windows 10)
- Также может быть интересно
- Новый бесплатный онлайн-курс MOOC «GIS for Climate Action», 25 октября – 6 декабря 2023
- Новые инструменты Deep Learning в ArcGIS 3.1
- 10 самых интересных новшеств в ArcGIS Pro 3.1
- Солнечная энергетика. Возможности ГИС
- Доступные геоданные на Узбекистан
- Тезисы докладов по гидрогеологической тематике с применением ArcGIS
- Эффекты веб-картографии
- Москва и окрестности начала 1930-х
- Форумы GIS-Lab.info
- Re: Python и русские буквы
- Re: Python и русские буквы
- Re: Python и русские буквы
- Re: Python и русские буквы
- Re: Python и русские буквы
- Re: Python и русские буквы
- Re: Python и русские буквы
- Re: Python и русские буквы
- Re: 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):
Войдите, чтобы написать ответ
Почему Джанго не подгружает картинку в CSS и браузер выдает ошибку 404?
VS + Python + кириллица, ошибка в консоли, как решить?
Всем привет!
Ради интереса поставил Python 3.5.1 -(решил посмотреть что это за язык, много слышал про него)
Так вот, когда выводишь программу в консоли у меня возникает ошибка, как я понял из-за русского языка и из-за кодировки. Когда пишешь на инглише все норм — конечно можно писать все на нем! и забить на проблему. Но, все-таки мы же русские ) и хочется сообщения писать на своем родном языке.
Погуглил данную тему, у многих людей на многих языках программирования возникает проблема именно из-за русских букв, все решают данную проблему по разному.
Господа! вопрос как решить мою проблему ?
Спасибо.
Что удалось нарыть.
А.
если поставить в начале кода такую конструкцию:
# -*- coding: cp1251 -*-
То начинает все работать, как я понял это принудительное перекодирование файла — (буду благодарен если точнее объясните господа)
Б.
(как я понял)
Файл нужно создавать в нужной кодировке utf8
По умолчанию Visual Studio создает файлы в другой кодировки, надо понять где это поменять / проверить / потестить.
Да, все верно! в Visual Studio идем Файл — Дополнительные параметры сохранения
и ставим так(скрин) все начинает работать..
Но это не спасает от такой записи. (скрин) вопрос остается что делать ?
Ради теста, напрямую запустил консоль python — а ввел там нужную команду все норм отобразилось!
Да что не так с этой чертовой VS ?
Как заставить выводить русский текст Python?
Что нужно сделать что-бы в консоль выводилась кириллица?
Для англ. алфавита — работает, а для русского — нет.
__author__ = 'getlucky' # -*- coding: utf-8 -*- def cesarMethod(message): output = [] alphabet = 'abcdefghijklmnopqrstuvwxyz'#'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' steps = int(raw_input('Введите Ваш ключ: ')) for i in message: if i == ' ': output.append(' ') else: pos = alphabet.index(i) + steps if pos >= 25: pos -= 26 output.append(alphabet[pos].decode('utf8')) print 'Зашифрованное сообщение: ', ''.join(output) message = raw_input('Введите Ваше сообщение: ').lower() cesarMethod(message)
Оценить 2 комментария
# -*- coding: utf-8 -*- message = 'ывпавыапавыпвпав' for i in message: print(i)
message = u'ывпавыапавыпвпав' for i in message: print(i)
разница всего в одном символе
# -*- coding: utf-8 -*- def cesarMethod(message): output = [] # alphabet = 'abcdefghijklmnopqrstuvwxyz'#'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' alphabet = u'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' # steps = int(raw_input('Введите Ваш ключ: ')) steps = 2 for i in message.decode('utf8'): if i == ' ': output.append(' ') else: pos = alphabet.index(i) + steps if pos >= 25: pos -= 26 output.append(alphabet[pos]) print 'Зашифрованное сообщение: ', ''.join(output) # message = raw_input('Введите Ваше сообщение: ').lower() message = 'специальнодлятостера' cesarMethod(message)
Python не понимает русский
Что нас ждет в Portal for ArcGIS 10.3
Решение проблемы с .NET при установке ArcGIS на Windows 8.1 (Windows 10)
Также может быть интересно
Новый бесплатный онлайн-курс MOOC «GIS for Climate Action», 25 октября – 6 декабря 2023
Новые инструменты Deep Learning в ArcGIS 3.1
10 самых интересных новшеств в ArcGIS Pro 3.1
Солнечная энергетика. Возможности ГИС
- ArcGIS
- ArcGIS Enterprise | Server
- ArcGIS Online
- ArcGIS Pro | ArcMap
- ГИС для бизнеса
- Данные в ArcGIS
- Дистанционное зондирование Земли (ДЗЗ)
- Картография и дизайн
- Образование и наука
- Приложения
- Сельское хозяйство
- Техподдержка
Доступные геоданные на Узбекистан
Тезисы докладов по гидрогеологической тематике с применением ArcGIS
Эффекты веб-картографии
Москва и окрестности начала 1930-х
Рубрики
- ArcGIS (174)
- ArcGIS Enterprise | Server (173)
- ArcGIS Online (157)
- ArcGIS Pro | ArcMap (180)
- Геология (14)
- ГИС для бизнеса (44)
- Данные в ArcGIS (101)
- Дистанционное зондирование Земли (ДЗЗ) (50)
- Инженерные коммуникации (28)
- Картография и дизайн (77)
- Образование и наука (85)
- Приложения (153)
- Разработка (56)
- Сельское хозяйство (6)
- События (50)
- Техподдержка (77)
Форумы GIS-Lab.info
Добрый день!
Начал тут недавно изучать Python. Решил сделать список папок в каталоге, чтобы пристегнуть к аркгисовскому Моделбилдеру, но че-то не соображу, как научить его понимать русские буквы. Получается типа [‘N:\\\xce\xf2\xe4\xe5\xeb\xfb\\\ . и т.п.
Кто в курсе, подскажите что делать.
Заранее спасибо.
Сообщения: 2627 Зарегистрирован: 29 мар 2007, 14:12 Статьи: 31 Проекты: 4/1
Re: Python и русские буквы
Сообщение Voltron » 23 янв 2012, 15:47
Типичная проблема . Используйте UTF-8 для исходников, т.е. код редактируйте в редакторе, который умеет UTF-8, а в самое начало файла добавьте строку
Сообщения: 588 Зарегистрирован: 30 мар 2009, 21:53 Статьи: 4 Проекты: 3
Re: Python и русские буквы
Сообщение yellow-sky » 23 янв 2012, 19:14
Мне кажется у товарища все таки проблема не с текстом исходника а с выводом значений.
Попробуйте: unicode_var.encode(‘utf-8’)
или, если вы в консоли windows: unicode_var.encode(‘cp1251’)
Сообщения: 2627 Зарегистрирован: 29 мар 2007, 14:12 Статьи: 31 Проекты: 4/1
Re: Python и русские буквы
Сообщение Voltron » 23 янв 2012, 20:41
yellow-sky писал(а): Мне кажется у товарища все таки проблема не с текстом исходника а с выводом значений.
Re: Python и русские буквы
Сообщение Serp » 24 янв 2012, 04:42
В исходниках у меня все ок. Проблема получается при выводе:
import os, glob
L = []
for root, dirs, files in os.walk(‘N:\Фондовые материалы’):
L.append(root)
Спасибо за ответ. Пойду смотреть Unicode HOWTO.
А еще у меня по ходу дела вопрос: как в этом os.walk обозначить, чтобы прога заходила только в каждый 1-й вложенный каталог, а не во все подряд (2, 3 уровня и т.п.)?
Re: Python и русские буквы
Сообщение Serp » 24 янв 2012, 12:10
Работаю в консоли под windows. У меня Питон 2,5 установленный за счет АркГИС-931.
Прочитал Unicode HOWTO. Там много написано про файлы, а вот про каталоги нашел только про строки ‘.’ или u’.’
Проверил >>> sys.getfilesystemencoding() — ‘mbcs’
Вижу, что прога работает: получается или
print os.listdir(‘D:\Test data’)
[‘Test’, ‘\xd2\xe5\xf1\xf2’] – пишет по-старому
или print os.listdir(u’D:\Test data’)
[u’Test’, u’\u0422\u0435\u0441\u0442′] – т.е. реакция есть, но русских букв нет.
А если сразу пишешь путь с русскими буквами, >>> print os.listdir(u’D:\Test data\Тест’)
то .. WindowsError: [Error 3] : u’D:\\Test data\\\xd2\xe5\xf1\xf2\\*.*’
А вот куда бы приспособить unicode_var.encode(‘cp1251’) так, к своему стыду, и не нашел.
Сообщения: 2627 Зарегистрирован: 29 мар 2007, 14:12 Статьи: 31 Проекты: 4/1
Re: Python и русские буквы
Сообщение Voltron » 24 янв 2012, 12:32
Serp писал(а): А вот куда бы приспособить unicode_var.encode(‘cp1251’) так, к своему стыду, и не нашел.
dir = u'D:\Test data\Тест' print dir.encode('cp866')
Сообщения: 588 Зарегистрирован: 30 мар 2009, 21:53 Статьи: 4 Проекты: 3
Re: Python и русские буквы
Сообщение yellow-sky » 24 янв 2012, 15:39
Serp писал(а): А вот куда бы приспособить unicode_var.encode(‘cp1251’) так, к своему стыду, и не нашел.
dir = u'D:\Test data\Тест' print dir.encode('cp866')
Re: Python и русские буквы
Сообщение Serp » 25 янв 2012, 13:10
Я на консоли пишу для обучения — так быстрее результат получается. Сделал скрипты (правда с выводом опять же в консоль) — тоже самое. Вобщем, я понял, что вы, как и все порядочные люди, просто используете только английские символы. У нас раньше тоже так было, но со временем обросли и русскими, т.к. виндовоз позволяет. Скрипт на VBA под Экселем собирает список каталогов по-русски за пару секунд, а тут получилась заморочка.
Кстати, в скрипте cp1251 нормально задалось в 1-й строке (# -*- и т.д.).
Файлы читает и путь понимает, если ему напрямую задать путь:
>>> reader = csv.reader(open(«D:\Test data\Тест\Текст.csv», «rb»))
>>> for row in reader:
print row
[‘a’, ‘b’, ‘c’]
[‘\xe0’, ‘\xe1’, ‘\xe2’] — здесь а,б,в. Т.е. все работает, но мне-то надо именно собрать список папок в каталоге.
Попробовал конвертнуть это \xe0′ в нормальные буквы, чтобы дальше передать, но в файле cp1251.py указаны такие соответствия с юникодом:
u’\u0441′ # 0xF1 -> CYRILLIC SMALL LETTER ES
u’\u0442′ # 0xF2 -> CYRILLIC SMALL LETTER TE
Вот между ними-то он и пляшет — вместо ‘Тест’ печатает:
или [‘\xd2\xe5\xf1\xf2′] или [u’\u0422\u0435\u0441\u0442’] — на выбор .
Ладно, надо еще хэлп почитать, может где что и попадется. Кто заглянет сюда даже через месяц — не стесняйтесь, пишите )
Ну и на счет 2-го вопроса тоже: как в этом os.walk обозначить, чтобы прога заходила только в каждый 1-й вложенный каталог, а не во все подряд (2, 3 уровня и т.п.)? (а то у ней времени не хватит)
Спасибо за помощь.
Сообщения: 2627 Зарегистрирован: 29 мар 2007, 14:12 Статьи: 31 Проекты: 4/1
Re: Python и русские буквы
Сообщение Voltron » 25 янв 2012, 13:48
Serp писал(а): Вобщем, я понял, что вы, как и все порядочные люди, просто используете только английские символы.
И это тоже. Но главная причина в другом, мы пользуемся правильными ОС, где нет такого бардака с кодировками .
Serp писал(а): Я на консоли пишу для обучения — так быстрее результат получается. Сделал скрипты (правда с выводом опять же в консоль) — тоже самое.
Выше же написано. Объекты unicode перед выводом в консоль надо конвертировать в соответствующую кодировку, в данном случае CP866. Вот пример
# -*- coding: utf-8 -*- import os for root, dirs, files in os.walk( u"D:/Books/" ): print "Looking in ", root.encode( "cp866" ) print "\tsubdirectories:" for d in dirs: print "\t",d.encode( "cp866" ) print "\tfiles:" for f in files: print "\t",f.encode( "cp866" ) print "\n"
Looking in D:\Books\Ф_Брукc_мл subdirectories: files: Мифический_человекомесяц.rtf Looking in D:\Books\О_Уайльд subdirectories: Пьесы Сказки files: Портрет_Дориана_Грея.rtf Looking in D:\Books\О_Уайльд\Пьесы subdirectories: files: Веер_леди_Уиндермир.rtf Женщина, не стоящая внимания.rtf Идеальный муж.rtf .
Serp писал(а): Ну и на счет 2-го вопроса тоже: как в этом os.walk обозначить, чтобы прога заходила только в каждый 1-й вложенный каталог, а не во все подряд (2, 3 уровня и т.п.)? (а то у ней времени не хватит)