Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: русские буквы  (Прочитано 708 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн A.J

  • Автор темы
  • Участник
  • *
  • Сообщений: 230
    • Просмотр профиля
русские буквы
« : 07 Сентябрь 2014, 15:23:45 »
Добрый день!
Я поставил python 2.7.8 версия но почему когда я добавляю русское слово в список.
Выводит черт знает что.
Кодировка стоит # -*- coding: utf-8 -*- что не так.
Странно кортеже на русском выводит нормально а списки нет

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: русские буквы
« Ответ #1 : 07 Сентябрь 2014, 15:30:22 »
Ставьте u перед строками с юникодом. То есть, к примеру:
Код: Python
  1. a = u'Ы'
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн A.J

  • Автор темы
  • Участник
  • *
  • Сообщений: 230
    • Просмотр профиля
Re: русские буквы
« Ответ #2 : 07 Сентябрь 2014, 15:52:47 »
Я ставил так s = [ u'Вася']
Но все равно выходит  вот это 
['\xd0\x92\xd0\xb0\xd1\x81\xd1\x8f']

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: русские буквы
« Ответ #3 : 07 Сентябрь 2014, 16:37:01 »
Ммм вот для размышления:
ilya@ilya-GE40-2OL:~$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = [u'Ы']
>>> a
[u'\u042b']
>>> a[0]
u'\u042b'
>>> print a[0]
Ы
>>> print a
[u'\u042b']

Может подскажет, куда копать.
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн .ubuntufan

  • Активист
  • *
  • Сообщений: 638
    • Просмотр профиля
Re: русские буквы
« Ответ #4 : 07 Сентябрь 2014, 17:40:13 »
Цитировать
['\xd0\x92\xd0\xb0\xd1\x81\xd1\x8f']

Это не unicode а обычный str.
Проверьте не происходит ли каких нибудь преобразований строки.
Алсо и str можно сконвертировать в unicode:
>>> s = ['Вася']
>>> s[0]
'\xd0\x92\xd0\xb0\xd1\x81\xd1\x8f'
>>> s1 = [u'Вася']
>>> s1[0]
u'\u0412\u0430\u0441\u044f'
>>> s[0].decode('utf-8')
u'\u0412\u0430\u0441\u044f'
>>> s[0].decode('utf-8') == s1[0]
True

Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 614
    • Просмотр профиля
Re: русские буквы
« Ответ #5 : 07 Сентябрь 2014, 18:07:19 »

Код: Python
  1. >>> a = 'Вася'
  2. >>> print(a.decode('utf-8'))
  3. Вася
  4. >>>

Пользователь решил продолжить мысль 07 Сентябрь 2014, 22:55:13:
Со списками так же:
Код: Python
  1. >>> a = ['Вася']
  2. >>> a
  3. ['\xd0\x92\xd0\xb0\xd1\x81\xd1\x8f']
  4. >>> print(a[0].decode('utf-8'))
  5. Вася
  6. >>>
Да и с кортежами то же самое, не знаю, почему они у кого-то правильно отображаются без перекодировки:
Код: Python
  1. >>> b = ('Петя',)
  2. >>> b
  3. ('\xd0\x9f\xd0\xb5\xd1\x82\xd1\x8f',)
  4. >>> print(b[0].decode('utf-8'))
  5. Петя
  6. >>>
« Последнее редактирование: 07 Сентябрь 2014, 22:55:13 от Jack Sparrow »
Why join the navy if you can be a pirate? (c) Steve Jobs

Оффлайн .ubuntufan

  • Активист
  • *
  • Сообщений: 638
    • Просмотр профиля
Re: русские буквы
« Ответ #6 : 08 Сентябрь 2014, 05:07:44 »
Цитировать
почему они у кого-то правильно отображаются без перекодировки

Во втором питоне str в отличие от unicode ни у кого в принципе не могут "правильно" отображаться без явного указания кодировки, там это (за исключением ascii) набор байт неопределенной кодировки.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 11887
  • Xubuntu 18.04 (64bit)
    • Просмотр профиля
Re: русские буквы
« Ответ #7 : 16 Сентябрь 2014, 12:18:52 »
в 2.7 с unicode работать можно - но гиморойно. Для себя решил что 2.7 пора хоронить... в 3.х - все уже причесано с unicode.

Вот тут - подробнее писал об этом.
« Последнее редактирование: 16 Сентябрь 2014, 12:29:13 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

 

Страница сгенерирована за 0.068 секунд. Запросов: 24.