<div class="gmail_quote">On Wed, Nov 25, 2009 at 8:44 AM, Albert-Jan Roskam <span dir="ltr">&lt;<a href="mailto:fomcl@yahoo.com">fomcl@yahoo.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit;" valign="top">
<div>Hi,</div>
<div></div>
<div>I&#39;m parsing an xml file using elementtree, but it seems to get stuck on certain non-ascii characters (for example: &quot;&quot;). I&#39;m using Python 2.4. Here&#39;s the relevant code fragment:</div>
<div></div>
<div># CODE:</div>
<div>for element in doc.getiterator():<br> try:<br>m = re.match(search_text, str(element.text))<br> except UnicodeEncodeError:<br> raise # I want to get rid of this exception.<br></div>
<div># PRINTBACK:</div>
<div>m = re.match(search_text, str(element.text))<br>UnicodeEncodeError: &#39;ascii&#39; codec can&#39;t encode character u&#39;\xea&#39; in position 4: ordinal not in range(128)</div></td></tr></tbody></table></blockquote>
<div><br>You can&#39;t convert element.text to a str because it contains non-ascii characters. Why are you converting it? re.match() will accept a unicode string as its argument.<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit;" valign="top">

<div></div>
<div>How can I get rid of this unicode encode error. I tried:</div>
<div>s = str(element.text)</div>
<div>s.encode(&quot;utf-8&quot;)</div>
<div>(and then feeding it into the regex)</div></td></tr></tbody></table></blockquote><div><br>This fails because it is the str() that won&#39;t work. To get UTF-8 use<br> s = element.text.encode(&#39;utf-8&#39;)<br>but I don&#39;t think this is the correct solution.<br>
</div><div></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit;" valign="top">

<div>The xml file is in UTF-8. Somehow I need to tell the program not to use ascii but utf-8, right?<br><br></div></td></tr></tbody></table></blockquote><div>No, just pass Unicode to re.match().<br><br>Kent <br></div></div>
<br>