On Wed, Feb 10, 2010 at 1:03 PM, kj <no.email@please.post> wrote:<br>> In <<a href="mailto:402ac982-0750-4977-adb2-602b19149d81@m24g2000prn.googlegroups.com">402ac982-0750-4977-adb2-602b19149d81@m24g2000prn.googlegroups.com</a>> Jonathan Gardner <<a href="mailto:jgardner@jonathangardner.net">jgardner@jonathangardner.net</a>> writes:<br>
<huge snip><br>>>It sounds like someone, probably beautiful soup, is trying to turn<br>>>your strings into unicode. A full stacktrace would be useful to see<br>>>who did what where.<br>><br>> Unfortunately, there's not much in the stacktrace:<br>
><br>> Traceback (most recent call last):<br>>  File "./download_tt.py", line 427, in <module ><br>>    x = "%s %s" % (table['id'], table.tr.renderContents())<br>> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 41: ordinal not in range(128)<br>
<br>Think I've found the problem. According to the BeautifulSoup docs, <font class="Apple-style-span" face="'courier new', monospace">renderContents()<font class="Apple-style-span" face="'times new roman', serif"> </font><span class="Apple-style-span" style="font-family: arial; ">returns</span></font><div>
<font class="Apple-style-span" face="'courier new', monospace"><span class="Apple-style-span" style="font-family: arial; ">a (by default, UTF-8-encoded) <font class="Apple-style-span" face="'courier new', monospace">str</font> [i.e. byte sequence] as opposed to <font class="Apple-style-span" face="'courier new', monospace">unicode</font><font class="Apple-style-span" face="arial, helvetica, sans-serif"> [i.e. abstract code point sequence]</font>.</span></font><div>
Thus, as was said previously, you're combining the <font class="Apple-style-span" face="'courier new', monospace">unicode</font> from <font class="Apple-style-span" face="'courier new', monospace">table['id']</font> and the <font class="Apple-style-span" face="'courier new', monospace">str</font> from <font class="Apple-style-span" face="'courier new', monospace">renderContents()</font>,</div>
<div>so Python tries to automatically+implicitly convert the <font class="Apple-style-span" face="'courier new', monospace">str</font> to <font class="Apple-style-span" face="'courier new', monospace">unicode</font> by decoding it as ASCII.</div>
<div>However, it's not ASCII but UTF-8, hence you get the error about it having non-ASCII bytes.<br><div><br></div><div>Solution: <font class="Apple-style-span" face="arial, helvetica, sans-serif">Convert the output of <font class="Apple-style-span" face="'courier new', monospace">renderContents()</font> back to </font><font class="Apple-style-span" face="'courier new', monospace">unicode</font><font class="Apple-style-span" face="arial, helvetica, sans-serif">.</font></div>
<div><br></div><div><font class="Apple-style-span" face="'courier new', monospace">x = u"%s %s" % (table['id'], table.tr.renderContents().decode('utf8'))</font></div><div><br></div><div>Now only <font class="Apple-style-span" face="'courier new', monospace">unicode</font> objects are being combined.</div>
<div><br></div><div>Your problem is particularly ironic considering how well BeautifulSoup handles Unicode overall;</div><div>I was unable to locate a <span class="Apple-style-span" style="font-family: 'courier new', monospace; ">renderContents()</span><font class="Apple-style-span" face="'times new roman', serif"> </font><font class="Apple-style-span" face="arial, helvetica, sans-serif">equivalent that returned </font><font class="Apple-style-span" face="'courier new', monospace">unicode</font><font class="Apple-style-span" face="arial, helvetica, sans-serif">.</font></div>
<div><br>Cheers,<br>Chris<br>--<br><a href="http://blog.rebertia.com">http://blog.rebertia.com</a><br></div></div></div>