но то, что я хочу увидеть распечатанным, это сюрприз:
[('亀',), ('犬',)]
На чем ты хочешь распечатать это? Потому что если это консоль, то вовсе не гарантируется, что ваша консоль может отображать эти символы. Вот почему представление объектов в repthon () repr () используется для безопасной опции \ -escapes, которую вы всегда сможете увидеть на экране и легко ввести.
В качестве предварительного условия вы должны использовать строки Unicode (u ''). И, как упоминал Мэтью, если вы хотите иметь возможность писать u '亀' непосредственно в исходном коде, вам нужно убедиться, что Python может прочитать кодировку файла. Для случайного использования не-ASCII символов лучше придерживаться экранированной версии u '\ u4e80', но когда у вас много восточноазиатского текста, вы хотите прочитать «# coding = utf-8» безусловно, путь.
print '[% s]'% ',' .join ([',' .join ('(% s,)'% ',' .join (ti) для ti in t)])
Это напечатало бы символы, развернутые в кавычки. На самом деле вы хотели бы:
def reprunicode(u):
return repr(u).decode('raw_unicode_escape')
print u'[%s]' % u', '.join([u'(%s,)' % reprunicode(ti[0]) for ti in t])
Это будет работать, но если консоль не поддерживает Unicode (а это особенно хлопотно для Windows), вы получите большой старый UnicodeError.
В любом случае это редко имеет значение, потому что repr () объекта, который вы видите здесь, обычно не попадает в открытый пользовательский интерфейс приложения; это действительно только для кодера.
Однако вам будет приятно узнать, что Python 3.0 ведет себя именно так, как вы хотите:
- простые '' строки без префикса 'u' теперь являются строками Unicode
- repr () показывает большинство символов Юникода дословно
- Лучше поддерживается Unicode в консоли Windows (вы все равно можете получить UnicodeError в Unix, если ваша среда не UTF-8)
Python 3.0 является немного новым и не очень хорошо поддерживается библиотеками, но он может лучше удовлетворить ваши потребности.