在tkinter标签中显示本地化日期会导致文本变形

时间:2018-12-03 16:26:18

标签: python python-3.x tkinter unicode

我正在将本地化的日期字符串放在标签中。这在英语中效果很好,但是当我使用locale.setlocale(locale.LC_TIME, "it_IT")用意大利语格式化日期时,结果被弄乱了:

Incorrect output when using setlocale

以下是代码的相关部分:

from tkinter import *
import locale
from datetime import date

root = Tk()
locale.setlocale(locale.LC_TIME, "it_IT")
today = date.today().strftime('%A %d %B')
Label(root, text=today, bg='black', fg='white', font=("arial", 35)).pack()

root.mainloop()][1]

ì(带有重音符号的i在此处显示为ì

我正在使用Python 3.6

如果我直接使用text="Lunedì 03 Dicembre" in the Label()`调用,输出将是正确的。

为什么输出混乱?

Correct output when entering literal string

1 个答案:

答案 0 :(得分:1)

您需要使用一种更特定的语言环境,其中一种具有代码页来编码包含的字符:

locale.setlocale(locale.LC_TIME, "it_IT.UTF-8")

我怀疑您的系统默认设置为ISO8859-15ISO8859-1,并且使用这两个编解码器中的任意一个对UTF-8编码的日期名称进行了解码。