Нет способа заставить str()
работать с Unicode в Python <3.0. </p>
Используйте repr(obj)
вместо str(obj)
. repr()
преобразует результат в ASCII, должным образом экранируя все, что не входит в диапазон кода ASCII.
Кроме этого, используйте файловый объект, который разрешает Unicode. Поэтому не кодируйте на входной стороне, а на выходной:
fileObj = codecs.open( "someFile", "w", "utf-8" )
Теперь вы можете записывать строки Unicode в fileObj
, и они будут преобразованы по мере необходимости. Чтобы сделать то же самое с print
, вам нужно обернуть sys.stdout
:
import sys, codecs, locale
print str(sys.stdout.encoding)
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
line = u"\u0411\n"
print type(line), len(line)
sys.stdout.write(line)
print line