Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 20, 2009 02:36:28

Rel
От:
Зарегистрирован: 2009-01-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Unicode -> cp1251, есть ли какой-то способ?

Добрый день,

Столкнулся с проблемой, очевидного решения которой не вижу.

Есть GUI на Qt, которое отдаёт скрипту на питоне две строки в UTF-8. Сам скрипт тоже написан в той же кодировке.

Проблема следующая: одна из строк - имя директории. Её наличие проверяется с помощью os.path.exists(dir). В случае с английскими именами всё в порядке, но стоит встретиться русским и питон тут же выдаёт false, даже если директория существует.

Почему так происходит - понятно.

Существует ли какой-нибудь способ реализовать эту проверку, не меняя кодировку получаемых строк и файла питона на cp1251?

Система - WinXP.

Спасибо.



Отредактировано (Янв. 20, 2009 02:40:07)

Офлайн

#2 Янв. 20, 2009 08:55:56

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Unicode -> cp1251, есть ли какой-то способ?

Поменять кодировку строки, самое простое. Чем это не удобно в твоем случае?



Офлайн

#3 Янв. 20, 2009 16:15:32

Rel
От:
Зарегистрирован: 2009-01-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Unicode -> cp1251, есть ли какой-то способ?

igor.kaist
Поменять кодировку строки, самое простое. Чем это не удобно в твоем случае?
Тем, что питон не умеет приводить юникодные строки с русскими символами к cp1251



Офлайн

#4 Янв. 20, 2009 17:06:17

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Unicode -> cp1251, есть ли какой-то способ?

Rel
Тем, что питон не умеет приводить юникодные строки с русскими символами к cp1251
ґґґ … смешно … может у тебя строка просто не юникод?

BTW utf-8 != unicode



Отредактировано (Янв. 20, 2009 17:07:02)

Офлайн

#5 Янв. 20, 2009 17:10:54

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Unicode -> cp1251, есть ли какой-то способ?

Тем, что питон не умеет приводить юникодные строки с русскими символами к cp1251
С чего вы это взяли? Да ещё так безапелляционно заявляете.
# -*- coding: UTF-8 -*-

testline = "строка с русскими символами и english letters"
print testline.decode('utf-8')
testline.decode('utf-8').encode('cp1251')
print testline

Офлайн

#6 Янв. 20, 2009 17:13:01

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Unicode -> cp1251, есть ли какой-то способ?

Проверить просто - проверяйте на наличие UnicodeEncodeError исключения при попытке teststring.decode('utf-8')

Офлайн

#7 Янв. 20, 2009 17:18:48

Rel
От:
Зарегистрирован: 2009-01-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Unicode -> cp1251, есть ли какой-то способ?

Ferroman
Тем, что питон не умеет приводить юникодные строки с русскими символами к cp1251
С чего вы это взяли? Да ещё так безапелляционно заявляете.
# -*- coding: UTF-8 -*-

testline = "строка с русскими символами и english letters"
print testline.decode('utf-8')
testline.decode('utf-8').encode('cp1251')
print testline
Действительно. Благодарю. А я всё на ошибки ascii-кодека натыкался при попытке прямой конвертации.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version