2016-01-23 84 views
2

我試圖讓它顯示正確如何獲得tkinter以顯示這些unicode字符?

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.

我該怎麼辦?

回答

3

你可能會走運。這些Unicode碼點是UTF-16替代品。當我用正確的Unicode編碼點的字符串tkinter,錯誤變成了:

_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() 
+1

簡而言之:Tcl似乎不支持BMP以外的字符。這意味着例如沒有表情符號。 – 9000

+0

似乎Tk在Windows上使用UTF-16。它在內部使用UTF-8,並繪製文本將其轉換爲寬字符字符串並調用['TextOutW'](https://msdn.microsoft.com/en-us/library/dd145133)(在[ AllocFontFamily'](http://core.tcl.tk/tk/artifact/b8b14e85a2fe1c8901422b0d99cf64d2e94c92eb?txt=1&ln=1544)並在['MultiFontTextOut']中調用(http://core.tcl.tk/tk/artifact/4830b197f8dd221678e14ecf4a87e80a1f1594be ?TXT = 1&LN = 1415))。也許開發人員只是在將TCL_UTF_MAX正式遞增到4之前就解決了一些問題。 – eryksun

相關問題