Страница 1 из 1

Qgis + Python + Кириллица + Действия

Добавлено: 16 апр 2013, 04:27
ANAT01
В Qgis нужно повесить действие на открытие файла с кириллическим именем.
OS: Windows 7 x64
Qgis: 1.8 (NextGIS)

Открываю консоль python (Модули > Консоль Python) и пишу

Код: Выделить всё

import os
os.system("notepad " + u"Абырвалг".encode("cp1251"))
Здесь все хорошо и отлично работает.

Захожу в "Действия" для слоя. Выбираю "Приложение Python" и пишу тоже самое один в один.
И тут ошибка:

Код: Выделить всё

При выполнении следующего кода возникла ошибка:
import os
os.system("notepad " + u"Абырвалг".encode("cp1251"))

Traceback (most recent call last):
  File "", line 2, in 
  File "C:\PROGRA~2\Quantum GIS Lisboa\apps\Python27\lib\encodings\cp1251.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to 
Где собака зарыта?

Re: Qgis + Python + Кириллица + Действия

Добавлено: 16 апр 2013, 11:15
Максим Дубинин
Возможно у васпросто бардак из кучи версий:
ANAT01 писал(а):Qgis: 1.8 (NextGIS)
ANAT01 писал(а):File "C:\PROGRA~2\Quantum GIS Lisboa\apps\Python27\lib\encodings\cp1251.py", line 12, in encode

Re: Qgis + Python + Кириллица + Действия

Добавлено: 16 апр 2013, 15:47
ANAT01
Максим Дубинин писал(а):Возможно у васпросто бардак из кучи версий:
Вы правы. Действительно сначала был с сайта qgis'а потом поверх поставил nextgis'овскую сборку.
Сейчас удалил старую версию через установка/удаление (папка в program files исчезла).
Также удалил C:\users\%username%\.qgis
Скачал свежую версию NextGIS-QGIS-c64bb9d-22.03.2013.exe

Ничего не поменялось :((

Код: Выделить всё

При выполнении следующего кода возникла ошибка:
import os
os.system("notepad " + u"Абырвалг".encode("cp1251"))


Traceback (most recent call last):
  File "", line 2, in 
  File "C:\NextGIS_QGIS\apps\Python27\lib\encodings\cp1251.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to 


Версия Python:
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]

Версия QGIS:
1.8.0-Lisboa 'Lisboa', exported

Путь поиска Python:
['C:/NextGIS_QGIS/apps/qgis/./python', 'C:/Users/User/.qgis//python', 'C:/Users/User/.qgis//python/plugins', 'C:/NextGIS_QGIS/apps/qgis/./python/plugins', 'C:\\Windows\\system32\\python27.zip', 'C:\\NextGIS_QGIS\\apps\\Python27\\DLLs', 'C:\\NextGIS_QGIS\\apps\\Python27\\lib', 'C:\\NextGIS_QGIS\\apps\\Python27\\lib\\plat-win', 'C:\\NextGIS_QGIS\\apps\\Python27\\lib\\lib-tk', 'C:\\NextGIS_QGIS\\apps\\qgis\\bin', 'C:\\NextGIS_QGIS\\apps\\Python27', 'C:\\NextGIS_QGIS\\apps\\Python27\\lib\\site-packages', 'C:\\NextGIS_QGIS\\apps\\Python27\\lib\\site-packages\\PIL', 'C:\\NextGIS_QGIS\\apps\\Python27\\lib\\site-packages\\win32', 'C:\\NextGIS_QGIS\\apps\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\NextGIS_QGIS\\apps\\Python27\\lib\\site-packages\\Pythonwin', 'C:\\NextGIS_QGIS\\apps\\Python27\\lib\\site-packages\\wx-2.8-msw-unicode', 'C:\\NextGIS_QGIS\\apps\\qgis\\python\\plugins\\fTools\\tools']

Re: Qgis + Python + Кириллица + Действия

Добавлено: 16 апр 2013, 15:56
Максим Дубинин
Забавно, у меня Ubuntu и 1.9

Если я делаю так:

Код: Выделить всё

os.system("gedit " + u"Абырвалг".encode("utf-8"))
то глючит кодировку

Изображение

если так:

Код: Выделить всё

os.system("gedit " + "Абырвалг")
то все окей

Изображение

Re: Qgis + Python + Кириллица + Действия

Добавлено: 16 апр 2013, 17:52
ANAT01
Да я уж всяко попробовал. Бывает выдает результат, но крякозябры.
У меня познаний нет столько ни в qgis ни в python чтобы решить проблему. Интернеты тоже ничем не помогли.
Похоже придется оставить затею

Re: Qgis + Python + Кириллица + Действия

Добавлено: 16 апр 2013, 19:16
Александр Мурый
А зачем специально задавать кодировку файла CP1251? "ANSI", вроде бы, стандартная Win-кодировка при создании текстовых файлов, нет?

Re: Qgis + Python + Кириллица + Действия

Добавлено: 17 апр 2013, 03:10
doujin
Попробуйте магический комментарий в начале.

Код: Выделить всё

# coding=cp1251
import os
cmd = u'notepad ' + u'Абырвалг'
os.system(cmd.encode(u'cp1251'))

P.S. Вообще, вся эта конструкция напоминает сказку, в которой игла была в яйце, яйцо в утке, утка в зайце и т.д.

Re: Qgis + Python + Кириллица + Действия

Добавлено: 17 апр 2013, 05:23
ANAT01
doujin писал(а):Попробуйте магический комментарий в начале.
Спасибо! Действительно помогло! Только вместо cp1251 нужно использовать utf-8.
Вот рабочий пример:

Код: Выделить всё

# -*- coding: utf-8 -*-
import os
os.system('notepad ' + u'Абырвалг'.encode('cp1251'))

Всем спасибо за помощь!