2011-01-24 1 views
3

私はhereに質問しましたが、私は答えが得られないと確信しています。mintty terminal、python、curses、utf8:間違った表示

  • コピー - このPythonコードを貼り付けます)
  • 適切にそれがうまく古典UTF8シェルで
  • それを実行し、ディスプレイ「Coordonnéesを」が、自宅でmintty端末において、それは「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, '') 

ので、私はしてみましたそれは働いた:

フランス語

から3210

locale.setlocale(locale.LC_ALL, 'fr_FR') 

は=>力を... は、それが唯一のアクセントのために働きました。 私は文字を描画、印刷ラインにしよう:

stdscr.addstr(20,20, "─ │ ┌ ┘ ┐ └ ├ ┤ ┬ ┴ ┼ ═ ║ ╔ ╝ ╗ ╚ ╠ ╣ ╦ ╩ ╬") 

は私を与える:

[email protected] 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の問題のいずれかになる可能性があります。

+0

くそー! Pythonコードが正しく表示されません。ここに表示する方法がわかっている場合は、コードが表示されているリンクに移動してここに貼り付けるようにお願いします(そして、ここでは動作させる方法を教えてください=)ありがとうございます) –

+0

Windows PythonまたはCygwin Python? – ak2

+0

Cygwin => cintとmintty => Pythonスクリプトを起動します。 –

答えて

0

解決済みです。 cygwinを再インストールしてpythonプログラムを再パッケージし、再ダウンロードしてminnty 0.9.5.1(mintty-0.9.5-cygwin17.zip)を再インストールして、今すぐ動作します。奇妙な。

0

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

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

minttyのデフォルトのエンコーディングはUTF8ですが、ロケールの優先エンコーディングは(ウィンドウであるため)cp1252です。

+0

私は今夜それを試してみませんが、それは同じカップル:cygwin/mintty Windowsの下で)。あなたが正しいのかどうか知らせます。どうもありがとう! Btw、私のコードをどうやって適切に表示しましたか? 「コード」ボタンをクリックしても機能しませんでした。 –

+0

nope: stdscr.addstr(4,4、sys.stdin.encoding) stdscr.addstr(5,4、sys.stdout.encoding) 結果:UTF-8/UTF-8 –

+0

動作しませんでした。私はまずそれが働いたと思って自分の答えを投稿したが、うまくいかなかった。私の答えを見てください。ここで問題の詳細を書きます。たぶんそれは、ミントコンソール自体から来ていません... –