Моя исходная строка была юникода строка в любом случае (т.е. префиксом U)
... который является проблемой. Это не была «строка», как таковая, а «объект Unicode». Он содержит последовательность кодов Unicode. Разумеется, эти кодовые точки должны иметь внутреннее представление, о котором знает Python, но что бы это ни было, абстрагируется, и они отображаются как те \uXXXX
объектов, когда вы print repr(my_u_str)
.
Чтобы получить последовательность байтов, которую может понять другая программа, вам необходимо принять эту последовательность кодов Юникода и закодировать ее. Вам нужно определиться с кодировкой, потому что есть выбор. UTF8 и UTF16 являются общими вариантами. ASCII тоже может быть, если он подходит. u"abc".encode('ascii')
работает просто отлично.
ли my_u_str = u"\u2119ython"
, а затем type(my_u_str)
и type(my_u_str.encode('utf8'))
, чтобы увидеть разницу в типах: первый <type 'unicode'>
и второй является <type 'str'>
. (В Python 2.5 и 2.6, во всяком случае).
В Python 3 все по-другому, но поскольку я редко использую его, я бы говорил из своей шляпы, если бы попытался сказать что-нибудь авторитетное.
Это не прямой ответ, но этот текст стоит прочитать: [Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать об Unicode и наборах символов (никаких оправданий!)] (Http: //www.joelonsoftware. com/articles/Unicode.html) Joel Spolsky – balpha
Удовлетворенное программированием. Теперь это популярная парадигма :) – Amnon
в моем опыте изучения основ (как вы здесь делаете) более эффективен. – Amnon