From: Jean-Michel P. <jea...@ir...> - 2004-08-17 09:01:28
|
Hi, I'm new to matplotlib which is really good job ;-) and I'm currently fighting against character encodings :-(. Being working under win2k/western Europe, I finally found on the web that using a cp850 source encoding definition was working with 'print' only if you also encode your strings from cp1252! (for us/en users: windows uses cp1252 but the console uses cp850, this message was written using iso-8859-1). Example: # -*- coding: cp850 -*- print unicode('texte français','cp1252') >>> texte français If I do the same with the matplotlib 0.54 'title' function I get an error telling the 'ascii' codec cannot encode my 'ç': # -*- coding: cp850 -*- from matplotlib.matlab import * plot([1,2,3,4]) title(unicode('texte français','cp1252')) >>> Exception in tkinter callback Traceback ... [...] font.set_text(s, 0.0) # ... UnicodeEncodeError: 'ascii' codec can't encode character u'\xe7' in position 10: ordinal not in range(128) ----------------- With matplotlib 0.61 I get this error: >>> title(unicode('texte français','cp1252')) Traceback (most recent call last): File "<<console>>", line 1, in ? File "C:\PYTHON23\Lib\site-packages\matplotlib\matlab.py", line 1576, in title draw_if_interactive() File "C:\PYTHON23\Lib\site-packages\matplotlib\backends\backend_gtk.py", line 582, in draw_if_interactive figManager.canvas.draw() File "C:\PYTHON23\Lib\site-packages\matplotlib\backends\backend_gtkagg.py", line 40, in draw FigureCanvasAgg.draw(self) File "C:\PYTHON23\Lib\site-packages\matplotlib\backends\backend_agg.py", line 306, in draw self.figure.draw(self.renderer) File "C:\PYTHON23\Lib\site-packages\matplotlib\figure.py", line 236, in draw for a in self.axes: a.draw(renderer) File "C:\PYTHON23\Lib\site-packages\matplotlib\axes.py", line 704, in draw self._title.draw(renderer) File "C:\PYTHON23\Lib\site-packages\matplotlib\text.py", line 209, in draw bbox, info = self._get_layout(renderer) File "C:\PYTHON23\Lib\site-packages\matplotlib\text.py", line 108, in _get_layout w,h = renderer.get_text_width_height( File "C:\PYTHON23\Lib\site-packages\matplotlib\backends\backend_agg.py", line 210, in get_text_width_height font.set_text(s, 0.0) # the width and height of unrotated string TypeError: CXX: type error. --------------- I tried to add different encodings (ie. unicode('texte français', 'cp1252').encode(...) with utf-8, cp1252, cp850...) without success. Naturally if I omit any unicode translation, it does not crash but the string is not correctly rendered. Does it mean that matplotlib currently expects 'ascii' strings only to passed to its text functions? JM. Philippe |