Pourquoi tcl / tkinter ne supporte-t-il que les caractères BMP?

J’essaie d’interroger et d’afficher des caractères encodés en utf-8 dans une interface graphique construite sur tkinter et donc tcl. Cependant, j’ai trouvé que tkinter ne peut pas afficher des caractères à 4 octets, c.-à-d. Des points de code unicode supérieurs à U + FFFF. pourquoi est-ce le cas? Quelles limitations implémenteraient les caractères non-BMP pour tcl?

Je ne peux pas interroger les caractères non-BMP via mon interface graphique, mais s’ils apparaissent dans un résultat, je peux copier / coller le caractère et voir le caractère / codepoint via unicode-table.com bien que mon système ne l’affiche pas. Donc, il semble que le caractère est affiché comme un codepoint U + FFFD mais stocké dans la vue avec le bon codepoint.

J’utilise un script Python 3.6.4 sur Windows 7.

Mise à jour: Voici l’erreur que j’ai dans certains contextes où le codage unicode à 4 octets est hors de scope des caractères BMP et ne peut pas être géré par Tcl

File "Project/userInterface.py", line 569, in populate_tree iids.append(self.detailtree.insert('', 'end', values=entry)) File "C:\Program Files (x86)\Python36-32\Lib\tkinter\ttk.py", line 1343, in insert res = self.tk.call(self._w, "insert", parent, index, *opts) _tkinter.TclError: character U+1f624 is above the range (U+0000-U+FFFF) allowed by Tcl 

Je gère cela en utilisant des expressions régulières pour remplacer les caractères Unicode hors limites par le caractère de remplacement.

  for item in ensortinges: #handles unicode characters that are greator than 3 bytes as tkinter/tcl cannot handle/display them entry = list(item) for i, col in enumerate(entry): if col and isinstance(col, str): re_pattern = re.comstack(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE) filtered_ssortingng = re_pattern.sub(u'\uFFFD', col) #replaces \u1000 and greater with the unknow character if filtered_ssortingng != col: entry[i] = filtered_ssortingng entry = tuple(entry) iids.append(self.detailtree.insert('', 'end', values=entry))