Уведомления

Группа в Telegram: @pythonsu

#1 Март 30, 2011 23:46:52

jozheg
От:
Зарегистрирован: 2011-03-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод строки с кракозябрами в строку с русскими буквами

Здравствуйте!
Проблема возникла во время использования тестирования под Windows XP проекта, написанного на Python 2.6 под Ubuntu.
У меня есть функция (gtk.FileChooserDialog().get_filename()), которая под виндой возращает строку в кривом формате - как обычную строку, где unicode символы (т.е все русские буквы) менялись на ‘\xhh\xhh’ - т.е на два символа с шестнадцатиричными кодами.
Так например вместо пути

"C:\\Documents and Settings\\user\\Рабочий стол\\file"
я получал
"C:\\Documents and Settings\\user\\\xd0\xa0\xd0\xb0\xd0\xb1\xd0\xbe\xd1\x87\xd0\xb8\xd0\xb9 \xd1\x81\xd1\x82\xd0\xbe\xd0\xbb\\file"
Помогите, пожалуйста, перевести эту строку в нормальную string, чтобы было платформонезависимо и нестрашно ).



Офлайн

#2 Март 30, 2011 23:54:25

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Перевод строки с кракозябрами в строку с русскими буквами

“Кривой формат” носит имя utf-8.



Офлайн

#3 Март 31, 2011 06:52:43

jozheg
От:
Зарегистрирован: 2011-03-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод строки с кракозябрами в строку с русскими буквами

Андрей Светлов
“Кривой формат” носит имя utf-8.
А как перевести в не utf-8 строку?



Офлайн

#4 Март 31, 2011 07:00:49

jozheg
От:
Зарегистрирован: 2011-03-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод строки с кракозябрами в строку с русскими буквами

Или это неправда, что в Windows нельзя создавать файлы с utf-именем?
Просто код:

filename = dialog.get_filename()
target = open(filename, "w")
target.write("There is no problems")
target.close()
в случае с русскими буквами этот код валится в Windows, но спокойно проходит под Ubuntu



Офлайн

#5 Март 31, 2011 07:40:00

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Перевод строки с кракозябрами в строку с русскими буквами

.decode('utf-8')
Почитайте уж что-нибудь по кодировкам.
На форуме народу много, может какие хорошие ссылки дадут.



Офлайн

#6 Март 31, 2011 08:23:04

jozheg
От:
Зарегистрирован: 2011-03-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод строки с кракозябрами в строку с русскими буквами

Спасибо, нашел небольшой how-to по кодировкам. Обязательно прочитаю
а для своей задачи уже придумал следующее решение:

import sys
encoding = sys.getfilesystemencoding()
filename = filename.decode('utf-8').encode(encoding)
И все OK!



Офлайн

#7 Март 31, 2011 08:33:48

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Перевод строки с кракозябрами в строку с русскими буквами

Подсказка: open принимает имя файла в юникоде, и это - предпочтительный вариант: http://asvetlov.blogspot.com/2011/03/import-and-unicode.html в части про mbcs.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version