4

私はここで尋ねましたが、私は答えを得ることができないと確信しています。

  • コピー-この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, "─ │ ┌ ┘ ┐ └ ├ ┤ ┬ ┴ ┼ ═ ║ ╔ ╝ ╗ ╚ ╠ ╣ ╦ ╩ ╬&quot;)

私に与える:

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で自宅でエンコードを強制すると、機能しなくなります。

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

これは機能しません。

私がどこを見ることができるか考えていますか?pythonはロケール設定を適切にオーバーライドしているようです...コンソールは適切に構成されており、フォントはvimで表示されるため、線画文字を表示できます。それで、それについてもっと考えると、それはpythonの問題かcursesの問題のどちらかかもしれません...

4

2 に答える 2

0

ロケールはエンコーディングを優先し、ttyのエンコーディングは同じである必要はありません。

sys.stdin.encodingとsys.stdout.encodingが何であるかを確認し、それを使用してみてください。

minttyのデフォルトのエンコーディングはUTF8であると推測されますが、ロケールで推奨されるエンコーディングは(Windowsであるため)cp1252です。

于 2011-01-24T10:30:15.643 に答える
0

解決しました。これが私がしたことです:私はcygwinを再インストールし、次に仕事で私のpythonプログラムを再パックし、それを再ダウンロードし、そしてminnty 0.9.5.1(mintty-0.9.5-cygwin17.zip)を再インストールしました、そしてそれは今動作します。変。

于 2011-01-24T21:07:39.213 に答える