[reportlab-users] Trouble with utf8 encoding

Saketh saketh.bhamidipati at gmail.com
Fri Dec 29 21:24:47 EST 2006


On 12/29/06, matt-lists at comnet.net.nz <matt-lists at comnet.net.nz> wrote:

>

> Hello,

>

> I'm having trouble with reportlab and utf8 encoding. I have a script that

> uses gettext to translate strings from .mo files. I don't know how

> familiar

> people on this list might be with this, but strings that have an _ in

> front

> of them are translated to the relevant string in the .mo file. I want to

> put

> the translated data into a pdf report, so I've set up a list of the data

> variables, some of which are translated, and some of which aren't (because

> they're numerical values). The data list looks like this:

>

> data = [weather.temperature() + _(" but feels like ") +

> weather.relative_heat(),_(weather.sky()),weather.humidity(),

> weather.wind_speed()

> + _(" from the ") +

> _(weather.wind()),weather.pressure(),_(weather.visibility()),weather.cover

> (),weather.uv()]

>

> However, using this, I kept getting errors like:

>

> Traceback (most recent call last):

> File "liquid_weather.py", line 4125, in menuOptionChanged

> printForecast(widget,1,1)

> File "liquid_weather.py", line 3443, in printForecast

> doc.build(Story, onFirstPage=currentForecast)

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 870, in build

> BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 699, in build

> self.clean_hanging()

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 375, in clean_hanging

> self.handle_flowable(self._hanging)

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 613, in handle_flowable

> f.apply(self)

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 100, in apply

> apply(getattr(doc,arn), args)

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 846, in handle_pageBegin

> self._handle_pageBegin()

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 400, in handle_pageBegin

> self.pageTemplate.onPage(self.canv,self)

> File "liquid_weather.py", line 3519, in currentForecast

> canvas.drawString(xStartPosData*inch,

> PAGE_HEIGHT-yStartPos,for_data[j]

> [i])

> File "/usr/lib/python2.4/site-packages/reportlab/pdfgen/canvas.py", line

> 1167, in drawString

> t.textLine(text)

> File "/usr/lib/python2.4/site-packages/reportlab/pdfgen/textobject.py",

> line

> 372, in textLine

> self._code.append('%s T*' % self._formatText(text))

> File "/usr/lib/python2.4/site-packages/reportlab/pdfgen/textobject.py",

> line

> 313, in _formatText

> for subset, t in font.splitString(text, canv._doc):

> File "/usr/lib/python2.4/site-packages/reportlab/pdfbase/ttfonts.py",

> line

> 1026, in splitString

> text = unicode(text, encoding or 'utf-8') # encoding defaults to

> utf-8

> UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 1:

> unexpected code byte

>

> I read somewhere that appending .encode('latin-1').decode('utf8') to the

> problem string might help, so I did that, so that the data list now looks

> like:

>

> data = [weather.temperature().decode('latin-1').encode('utf8') + _(" but

> feels

> like ").decode('latin-1').encode('utf8') +

> weather.relative_heat().decode('latin-1').encode('utf8'),_(weather.sky()),

> weather.humidity(),weather.wind_speed()

> + _(" from the ") +

> _(weather.wind()),weather.pressure(),_(weather.visibility()),weather.cover

> (),weather.uv()]

>

> However, I'm now getting the following error:

>

> Traceback (most recent call last):

> File "liquid_weather.py", line 4122, in menuOptionChanged

> printForecast(widget,0,1)

> File "liquid_weather.py", line 3443, in printForecast

> doc.build(Story, onFirstPage=currentForecast)

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 870, in build

> BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 699, in build

> self.clean_hanging()

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 375, in clean_hanging

> self.handle_flowable(self._hanging)

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 613, in handle_flowable

> f.apply(self)

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 100, in apply

> apply(getattr(doc,arn), args)

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 846, in handle_pageBegin

> self._handle_pageBegin()

> File

> "/usr/lib/python2.4/site-packages/reportlab/platypus/doctemplate.py",

> line 400, in handle_pageBegin

> self.pageTemplate.onPage(self.canv,self)

> File "liquid_weather.py", line 3456, in currentForecast

> data = [weather.temperature().decode('latin-1').encode('utf8') + _("

> but

> feels like ").decode('latin-1').encode('utf8') +

> weather.relative_heat().decode('latin-1').encode('utf8'),_(weather.sky()),

> weather.humidity(),weather.wind_speed()

> + _(" from the ") +

> _(weather.wind()),weather.pressure(),_(weather.visibility()),weather.cover

> (),weather.uv()]

> UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in

> position

> 5: ordinal not in range(128)

>

> I'm not sure if this is reportlab producing this error, or the

> decode/encode

> bits. Also, the error only appears with some of the translations. Others

> don't have this issue. Can someone help me with this issue? Is the

> decode/encode thing the right way to deal with this? Any help would be

> appreciated.

>

> Cheers

>

> Matt

> _______________________________________________

> reportlab-users mailing list

> reportlab-users at reportlab.com

> http://two.pairlist.net/mailman/listinfo/reportlab-users

>

If you try to encode an already encoded Unicode string, you can get errors
like these. It's not an intuitive error, and I remember that it gave me
major headaches until I figured out what was going on.

At first glance, that seems to be the problem.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://two.pairlist.net/pipermail/reportlab-users/attachments/20061229/711d18dc/attachment.htm


More information about the reportlab-users mailing list