Minttyターミナル、Python、Curses、およびUTF8:誤ったディスプレイ

StackOverflow https://stackoverflow.com/questions/4780591

  •  23-10-2019
  •  | 
  •  

質問

私は尋ねました ここ しかし、私は答えが得られないと確信しています。

  • コピー - このPythonコードを貼り付けます:
  • それを実行します
  • 古典的なUTF8シェルでは、それは適切に機能し、「Coordonnées」を表示しますが、自宅の私のミントターミナルには「Coordonnm-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()

アップデート

エラー: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プログラムを再パックし、再ダウンロードしてから再インストールされた0.9.5.1(Mintty-0.9.5-Cygwin17.zip)を再インストールしました。変。

他のヒント

あなたのロケールはエンコードを好み、あなたのTTYのエンコードは同じである必要はありません。

sys.stdin.encodingとsys.stdout.encodingを確認し、それを使用してみてください。

ワイルド推測では、MinttyのデフォルトのエンコードはUTF8ですが、ロケールが好むエンコードは(Windowsのため)CP1252です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top