терминал mintty, python, curses и utf8: неправильное отображение - PullRequest
3 голосов
/ 24 января 2011

Я спросил здесь , но я почти уверен, что не получу ответа.

  • copy - вставьте этот код Python:
  • выполнить его
  • в классической оболочке utf8, он работает правильно и отображает "Coordonnées", но в моем мятном терминале дома он отображает "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 отображает правильно эти символы.Похоже, это происходит из питона?Из моего Windows / cygwin / mintty, который работает:

env | grep -i lang
LANG=C.UTF-8

, если я принудительно кодирую дома в моем Windows / cygwin / mintty, что не работает:

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

это не работает.

Есть идеи, где я могу посмотреть?Python, похоже, корректно переопределяет настройки локали ... консоль правильно настроена, и шрифты могут отображать символы рисования линий, потому что я вижу их с помощью vim.Так что если подумать больше, это может быть либо проблема с питоном, либо проблема с проклятиями ...

Ответы [ 2 ]

0 голосов
/ 25 января 2011

Это решено. вот что я сделал: я переустановил cygwin, затем перепаковал мою программу на python на работе, заново загрузил ее, затем переустановил minnty 0.9.5.1 (mintty-0.9.5-cygwin17.zip), и теперь он работает. Странно.

0 голосов
/ 24 января 2011

Ваши локали предпочитают кодировку, и кодировка вашего tty не обязательно должна быть одинаковой.

Проверьте, что такое sys.stdin.encoding и sys.stdout.encoding, и попробуйте использовать это.

Догадывается, что кодировка по умолчанию для mintty - UTF8, но предпочитаемая вами кодировка для локали - (поскольку это windows) cp1252.

...