tags:

views:

1924

answers:

2

When I tried to get the content of a tag using "unicode(head.contents[3])" i get the output similar to this: "Christensen Sk\xf6ld". I want the escape sequence to be returned as string. How to do it in python?

+2  A: 

I suspect that it's acutally working correctly. By default, Python displays strings in ASCII encoding, since not all terminals support unicode. If you actually print the string, though, it should work. See the following example:

>>> u'\xcfa'
u'\xcfa'
>>> print u'\xcfa'
Ïa
BJ Homer
If the problem is with terminal, will it be displayed properly if I save it to a database(MySQL)??
Vicky
+4  A: 

Assuming Python sees the name as a normal string, you'll first have to decode it to unicode:

>>> name
'Christensen Sk\xf6ld'
>>> unicode(name, 'latin-1')
u'Christensen Sk\xf6ld'

Another way of achieving this:

>>> name.decode('latin-1')
u'Christensen Sk\xf6ld'

Note the "u" in front of the string, signalling it is uncode. If you print this, the accented letter is shown properly:

>>> print name.decode('latin-1')
Christensen Sköld

BTW: when necessary, you can use de "encode" method to turn the unicode into e.g. a UTF-8 string:

>>> name.decode('latin-1').encode('utf-8')
'Christensen Sk\xc3\xb6ld'
Mark van Lent
thanks a lot dude. So if I need it to save it to a database i can decode it and save to the database, right?
Vicky
NO, read Mark's example again. After decoding the data from whatever it is (latin1, cp1252, etc) into unicode, you need to encode your unicode string with an encoding that (1) your database supports and (2) preserves all unicode characters ... typically UTF-8.
John Machin
ok dude thank u
Vicky