Уведомления

Группа в Telegram: @pythonsu

#1 Март 16, 2009 00:22:22

CheshireKat
От: Moscow
Зарегистрирован: 2009-03-15
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Есть ли возможность сделать русские буквы в STR типе ?

вот код:
#!/usr/bin/python
# -*- coding: utf-8 -*-

sTring = ‘Привет, я питон’
print “1. %s” % ( type( sTring ), )
print “2. %s” % ( sTring, )
aTest =
print “3. %s” % ( sTring, )
print “4. %s” % ( type(sTring ), )
print “5. %s” % ( , )
aTest.append(sTring)
print “6. %s” % (aTest, )
for sT in aTest:
print “7. %s” % ( sT, )
print “8. %s” % ( type( sT ) , )

Почему у меня выод вот такой:

1. <type ‘str’>
2. Привет, я питон
3. &#65533;
4. <type ‘str’>
5.
6.
7. Привет, я питон
8. <type ‘str’>

___________
locale

LANG=ru_RU.UTF-8
….
ну, кароче, все у меня в УТФ.
_________________________

Вопрос такой, кочему при выводе всей строки у меня выводится по русски, а если 1 символ, то уже нет ?

Форум забит воплями о кодировке, которая решаеться простым поиском в гугле и написанием # -*- coding: utf-8 -*- в начале скрипта

вопрос самый для меня важный из этого ( с остальным я смирился) - это третий пункт? почему вопрос то?

у меня все у утф.

переводить все на u'Привет я питон' , не очень хочется.


Спасибо.

Если эта тема обсуждалась просто тыкните на нее.

П.С.

В питоне все устраивает, но ситуация с уникодом непонятна.

Отредактировано (Март 16, 2009 00:32:42)

Офлайн

#2 Март 16, 2009 01:04:41

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Есть ли возможность сделать русские буквы в STR типе ?

Потому что unicode != utf-8

А именно в utf-8 кодировке символ кодируется от одного до 4 или 6 байт(не помню). Символы кириллицы кодируются больше чем одним байтом. Поэтому когда Вы работаете со строкой в utf-8 то при получении одного символа Вы реально получаете один байт. Работать нужно с юникод строками а вывод на stdout или в файл или куда-нибудь еще нужно уже кодировать в utf-8 или как Вам нравится.

И это было описано на форуме.



Офлайн

#3 Март 16, 2009 21:20:04

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Есть ли возможность сделать русские буквы в STR типе ?

sTring = u'Привет, я питон'

я думаю так попродуй

Офлайн

#4 Март 17, 2009 15:48:10

lizzard
От:
Зарегистрирован: 2009-03-05
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Есть ли возможность сделать русские буквы в STR типе ?

Не хочу разводить флейм и флуд, но:

CheshireKat
переводить все на u'Привет я питон' , не очень хочется.
sypper-pit
sTring = u'Привет, я питон'

я думаю так попродуй
И не совсем понял смысл этого:
cutwater
Символы кириллицы кодируются больше чем одним байтом. Поэтому когда Вы работаете со строкой в utf-8 то при получении одного символа Вы реально получаете один байт.
Почему один байт то получаем тогда, если кириллица кодируется больше, чем одним байтом?



Офлайн

#5 Март 17, 2009 19:45:49

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Есть ли возможность сделать русские буквы в STR типе ?

Читать о строках в питоне.

Почему один байт то получаем тогда, если кириллица кодируется больше, чем одним байтом?
Опять же читать о различии байт-строк и юникод-строк.
Если строка не юникод, то питон по сути не знает ничего о том что один символ закодирован более чем одним байтом и работает с отдельными байтами. юникод упрощенно кодировко-независимое представление символа (подробней читать стандарт unicode) и питон корректно работает со строкой в юникод-представлении.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version