我已经在这里询问过了,但我确信我不会得到答案。
- 复制并粘贴此Python代码:
- 执行它
- 在传统的utf8 shell中,它可以正常工作并显示“Coordonnées”,但是在我家的mintty终端中,它显示为“CoordonnM-CM-)es”。有什么办法可以让它正常工作,或者我应该去哪里查找(mintty没有字符编码选项)?
代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys, time, random, copy, pprint
import termios, tty, fcntl
import thread, curses
import locale
def curses_main(stdscr, code):
curses.curs_set(0)
stdscr.addstr(2, 0, "Coordonnées")
stdscr.refresh()
# (1) = délai d'attente de 1/10 ème de seconde :
curses.halfdelay(1)
while True:
try:
c=stdscr.getch()
except:
c=-1
if 0<c<256:
if chr(c) in 'Qq':
break
def main():
locale.setlocale(locale.LC_ALL, '')
code = locale.getpreferredencoding()
curses.wrapper(curses_main, code)
if __name__ == '__main__':
main()
更新
错误:我认为找到了它: 一开始就写在那个代码里。
locale.setlocale(locale.LC_ALL, '')
所以我尝试了一下,它起作用了:
locale.setlocale(locale.LC_ALL, 'fr_FR')
=> 强制将其转换为法语
... 它可以工作,但只适用于重音符号。 如果我尝试打印线条绘图字符:
stdscr.addstr(20,20, "─ │ ┌ ┘ ┐ └ ├ ┤ ┬ ┴ ┼ ═ ║ ╔ ╝ ╗ ╚ ╠ ╣ ╦ ╩ ╬")
给我:
M-b~T~@ M-b~T~B M-b~T~L M-b~T~X M-...
“什么是头部撞击,即vim是否正确显示这些字符。因此,似乎它来自Python?从我的Windows/cygwin/mintty上运行正常。”
env | grep -i lang
LANG=C.UTF-8
如果我在家中的Windows/cygwin/mintty上强制编码,那么这是无效的:doesn't
locale.setlocale(locale.LC_ALL, 'C.UTF-8')
这个不起作用。
有任何想法在哪里可以寻找?Python似乎正确地覆盖了本地设置...控制台已经正确配置,并且字体可以显示线条字符,因为我在vim中看到它们。所以仔细思考,可能是Python的问题或curses的问题...