如何让tkinter显示这些unicode字符?

时间:2016-01-23 16:33:51

标签: python windows python-3.x unicode tkinter

我正试图让它正确显示

  

unicode :.

嗯,这个角色范围。这是'Mathematical Alphanumeric Symbols Unicode block'。 关于这些角色的事情,他们使用两个逃脱一个字母,所以它有点奇怪

  

。 = \ uD835 \ uDC12 \ uD835 \ uDC13 \ uD835 \ uDC00 \ uD835 \ uDC02 \ uD835 \ uDC0A \ uD835 \ uDC0E \ uD835 \ uDC15 \ uD835 \ uDC04 \ uD835 \ uDC11 \ uD835 \ uDC05 \ uD835 \ uDC0B \ uD835 \ uDC0E \ uD835 \ uDC16。\ uD835 \ uDC02 \ uD835 \ uDC0E \ uD835 \ uDC0C

无论如何,他们实际上正确输出到我的程序,但他们没有显示。 从谷歌搜索,我看到tkinter和unicode支持存在一些问题。 Picture related.

我该怎么办?

1 个答案:

答案 0 :(得分:3)

你可能运气不好。这些Unicode代码点是UTF-16代理。当我使用tkinter的字符串使用正确的Unicode代码点时,错误变为:

_tkinter.TclError: character U+1d412 is above the range (U+0000-U+FFFF) allowed by Tcl

我使用的字符串:

s = '\U0001d412\U0001d413\U0001d400\U0001d402\U0001d40a\U0001d40e\U0001d415\U0001d404\U0001d411\U0001d405\U0001d40b\U0001d40e\U0001d416.\U0001d402\U0001d40e\U0001d40c'

import unicodedata as ud
for c in s:
    print(ud.name(c))

输出:

MATHEMATICAL BOLD CAPITAL S
MATHEMATICAL BOLD CAPITAL T
MATHEMATICAL BOLD CAPITAL A
MATHEMATICAL BOLD CAPITAL C
MATHEMATICAL BOLD CAPITAL K
MATHEMATICAL BOLD CAPITAL O
MATHEMATICAL BOLD CAPITAL V
MATHEMATICAL BOLD CAPITAL E
MATHEMATICAL BOLD CAPITAL R
MATHEMATICAL BOLD CAPITAL F
MATHEMATICAL BOLD CAPITAL L
MATHEMATICAL BOLD CAPITAL O
MATHEMATICAL BOLD CAPITAL W
FULL STOP
MATHEMATICAL BOLD CAPITAL C
MATHEMATICAL BOLD CAPITAL O
MATHEMATICAL BOLD CAPITAL M

我使用了"你好世界" Python 3.5文档中的示例:

import tkinter as tk

s = '\U0001d412\U0001d413\U0001d400\U0001d402\U0001d40a\U0001d40e\U0001d415\U0001d404\U0001d411\U0001d405\U0001d40b\U0001d40e\U0001d416.\U0001d402\U0001d40e\U0001d40c'

class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = s
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

        self.QUIT = tk.Button(self, text="QUIT", fg="red",
                                            command=root.destroy)
        self.QUIT.pack(side="bottom")

    def say_hi(self):
        print("hi there, everyone!")

root = tk.Tk()
app = Application(master=root)
app.mainloop()