我问过 这里 但是我很确定我不会得到答案。

  • 复制 - 粘贴此Python代码:
  • 执行它
  • 在经典的UTF8外壳中,它可以正常工作并显示“坐标”,但在我家里的薄荷终端中显示“ 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()

更新

错误:i 想法 找到它:它是在任何地方写成的,以从该代码开始:

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

如果我强迫在家中编码我的窗户/cygwin/mintty 工作:

locale.setlocale(locale.LC_ALL, 'C.UTF-8')

这行不通。

知道我可以在哪里看吗? Python似乎可以正确地覆盖位置设置...正确配置了控制台,并且字体可以显示行绘图字符,因为我看到了它们的VIM。因此,对此进行更多的思考,它可能是Python的问题,也可能是诅咒的问题...

有帮助吗?

解决方案 2

它解决了。这是我所做的:我重新安装了Cygwin,然后重新包装了我的Python程序,重新下载了它,然后重新安装了Minnty 0.9.5.1(MINTTY-0.9.5.9.5-CYGWIN17.ZIP),现在可以使用。奇怪的。

其他提示

您的语言环境更喜欢编码,而您的TTY编码不一定相同。

检查sys.stdin.coding和sys.stdout.soding是什么,并尝试使用它。

狂野的猜测是,Mintty的默认编码是UTF8,但是您的LECTES首选编码是(因为它的Windows)CP1252。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top