Bonjour, J'ai écrit une fonction makePrintable() qui permet d'afficher de manière intelligible une chaîne de caractère dans un charset donné : http://hachoir.org/browser/hachoir/trunk/src/hachoir/tools.py?rev=621#L176 Le but étant d'échapper (syntaxe "\xHH") les caractères non imprimables (ou invalides dans leur charset d'origine). En particulier lorsqu'on reçoit une chaîne 'str', tous les caractères > 127 sont "invalides". La code donné en lien fonctionne très bien. Par contre, j'ai remarqué que Python ne valide pas les chaînes Unicode. Si on se réfère à la table Unicode : 0xFFFF est invalide, pourtant Python l'accepte sans broncher : >>> u"\uffff" '\uffff' Je cherche donc à écrire une fonction (rapide si possible) qui échapperait ces drôles de caractères. Proposition qui semble fonctionner (dumoins pour l'exemple donné, u"\uffff") : import unicodedata def escapeInvalidUnicode(text): newdata = [] for character in text: try: unicodedata.name(character) newdata.append(character) except ValueError: newdata.append("\u%04x" % ord(character)) return "".join(newdata) >>> escapeInvalidUnicode(u"\uffff") '\\uffff' Par contre, cette fonction doit être _très_ lente et assez lourde (elle charge les noms des caractères Unicode, la table doit être grosse :-p). Une idée plus légère ? Haypo -- Victor Stinner aka haypo http://hachoir.org/ <~~ nouvelle url, yahoo!