мясной терминал, питон, проклятия и UTF8: Неправильный дисплей
Вопрос
Я спросил здесь Но я уверен, что не получу ответа.
- Скопировать - вставьте этот код Python:
- выполнить это
- В классической оболочке UTF8 он работает должным образом и отображает «координат», но в моем мясном терминале дома он отображает «Координинг-CM-) es». Любая идея, как я мог бы заставить это работать, или где я должен посмотреть (у Минтти нет вариантов кодирования персонажа)?
код:
#!/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')
=> Написать его на французский язык
... это сработало, но только для акцентов. Если я попытаюсь напечатать линию рисования Chars:
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
Если я заставляю кодировать дома в моих окнах/цигвин/мятном не Работа:
locale.setlocale(locale.LC_ALL, 'C.UTF-8')
Это не работает.
Есть идеи, куда я мог бы посмотреть? Python, кажется, правильно переопределяет настройки локализации ... Консоль правильно настроена, а шрифты могут отображать чертежные карты линии, потому что я вижу их с VIM. Так что больше думать об этом, это может быть либо проблемой Python, либо проблемой проклятий ...
Решение 2
Это решено. Вот что я сделал: я переустановил Cygwin, затем перепаковал свою программу Python на работе, а затем повторно загрузил его, а затем повторно установил Minnty 0.9.5.1 (Mintty-0.9.5-cygwin17.zip), и это работает сейчас. Странный.
Другие советы
Ваши локалы предпочитают кодирование, и кодирование вашего TTY не должно быть таким же.
Проверьте, что такое sys.stdin.encoding и sys.stdout.encoding, и попробуйте использовать это.
Дикие предположения заключается в том, что кодирование по умолчанию для Mintty является UTF8, но ваши локалы предпочитают кодирование (так как это Windows) CP1252.