Děkuji všem, kteří sem dávali příspěvky. Opravdu to pomáhá mé znalosti unicode (a doufejme, že i další lidé se něco naučili).
Zdálo se, že jsme všichni štěkali na špatný strom, protože jsem se snažil zjednodušit svůj problém a neposkytl VŠECHNY informace. Zdá se, že jsem nepoužíval „REAL“ řetězce unicode, ale spíše BeautifulSoup.NavigableString, které se opakují jako řetězce unicode. Takže všechny výtisky vypadaly jako unicode, ale nebyly.
Někde hluboko v knihovně MySQLDB si s těmito řetězci nedokázali poradit.
Toto fungovalo:
>>> Achievement.objects.get(name = u"Mirror's Edge\u2122")
<Achievement: Mirror's Edge™>
Na druhou stranu:
>>> b = BeautifulSoup(u"<span>Mirror's Edge\u2122</span>").span.string
>>> Achievement.objects.get(name = b)
... Exceptoins ...
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2122' in position 13: ordinal not in range(128)
Ale funguje to :
>>> Achievement.objects.get(name = unicode(b))
<Achievement: Mirror's Edge™>
Takže ještě jednou díky za veškerou pomoc s unicode, jsem si jistý, že se bude hodit. Ale zatím ...
UPOZORNĚNÍ :BeautifulSoup nevrací hodnotu REAL unicode řetězce a měly by být vynuceny pomocí unicode(), než s nimi uděláte cokoliv smysluplného.