[scodoc-devel] [SVN] Scolar : [1601] Traitement des caracteres unicodes combines (par ex.

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Sam 28 Jan 17:13:53 CET 2017


Une pièce jointe HTML a été nettoyée...
URL: https://listes.univ-paris13.fr/pipermail/scodoc-devel/attachments/20170128/ae1c6b24/attachment.htm 
-------------- section suivante --------------
Modified: branches/ScoDoc7/sco_pdf.py
===================================================================
--- branches/ScoDoc7/sco_pdf.py	2017-01-27 14:54:47 UTC (rev 1600)
+++ branches/ScoDoc7/sco_pdf.py	2017-01-28 16:13:52 UTC (rev 1601)
@@ -33,6 +33,7 @@
 """
 import time, cStringIO
 from types import StringType
+import unicodedata
 
 import reportlab
 from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Frame, PageBreak
@@ -64,7 +65,12 @@
     # Mis en service le 4/11/06, passage à ReportLab 2.0
     if not s:
         s = ''
-    return unicode(s, SCO_ENCODING, 'replace').encode('utf8')
+    # Remplace caractères composés
+    #  eg 'e\xcc\x81' COMBINING ACUTE ACCENT  par '\xc3\xa9' LATIN SMALL LETTER E WITH ACUTE
+    # car les "combining accents" ne sont pas traités par ReportLab mais peuvent
+    # nous être envoyés par certains navigaters ou imports
+    u = unicodedata.normalize( 'NFC', unicode(s, SCO_ENCODING, 'replace') )
+    return u.encode('utf8')
 
 def _splitPara(txt):
     "split a string, returns a list of <para > ... </para>"


Plus d'informations sur la liste de diffusion scodoc-devel