Моя исходная строка в любом случае была строкой Unicode (то есть с префиксом au)
... что является проблемой.Это была не «строка» как таковая, а «объект Unicode».Он содержит последовательность кодовых точек Unicode.Эти кодовые точки должны, конечно, иметь некоторое внутреннее представление, о котором знает Python, но что бы это ни было абстрагировано, они отображаются как \uXXXX
сущности, когда вы print repr(my_u_str)
.
Чтобы получитьпоследовательность байтов, которую может понять другая программа, вам нужно взять эту последовательность кодовых точек Unicode и кодировать ее.Вам нужно определиться с кодировкой, потому что есть из чего выбирать.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 все по-другому, но, поскольку я редко использую его, я бы говорил из своей головы, если бы попытался сказать что-нибудь авторитетное об этом.