私は以下この質問の下に掲載されるように、適切に関連していると信じています。ここではutfinfo.plを使用します(Super Userも参照)。
まず第一には、標準のASCII文字セット、Unicodeコードポイントとバイトエンコーディングのための同じである:
$ echo 'a' | perl utfinfo.pl
Char: 'a' u: 97 [0x0061] b: 97 [0x61] n: LATIN SMALL LETTER A [Basic Latin]
だから我々は、Pythonのcurses
で行うことができます。
window.addch('a')
window.border('a')
..文字は、基本的なASCIIを超えている場合、しかし、
を意図したとおり。そして、それは動作しますが、その後、必ずしも明確なことはありません
addch
docs違いが、あります。まず、私が行うことができます、私の
gnome-terminal
で、Unicode文字 'π' がレンダリングされる場合には
window.addch(curses.ACS_PI)
window.border(curses.ACS_PI)
を...。しかし、ACS_PI
を調べると、それは4194427(0x40007b)の値を持つ整数であることがわかります。したがって、次も同じ文字レンダリングされます「π」(または評価者、グリフを?):
window.addch(0x40007b)
window.border(0x40007b)
は何が起こっているかを確認するには、私はncurses
ソースを通じてgreppedし、次を発見した:
#define ACS_PI NCURSES_ACS('{') /* Pi */
#define NCURSES_ACS(c) (acs_map[NCURSES_CAST(unsigned char,c)])
#define NCURSES_CAST(type,value) static_cast<type>(value)
#lib_acs.c: NCURSES_EXPORT_VAR(chtype *) _nc_acs_map(void): MyBuffer = typeCalloc(chtype, ACS_LEN);
#define typeCalloc(type,elts) (type *)calloc((elts),sizeof(type))
#./widechar/lib_wacs.c: { '{', { '*', 0x03c0 }}, /* greek pi */
ここ
注:
$ echo '{π' | perl utfinfo.pl
Got 2 uchars
Char: '{' u: 123 [0x007B] b: 123 [0x7B] n: LEFT CURLY BRACKET [Basic Latin]
Char: 'π' u: 960 [0x03C0] b: 207,128 [0xCF,0x80] n: GREEK SMALL LETTER PI [Greek and Coptic]
... ACS_PI
用4194427(0x40007b)の値に関し、どちらも。
したがって、(unsigned char
とは対照的に、基本的にunsigned int
)addch
及び/又はborder
はASCII上記文字を見たとき、彼らは(少なくともこの例では)その番号を使用しない Unicodeコードポイントとして、またはUTFとして-8エンコードされたバイト表現を使用する代わりに、acs_map
-ping関数のルックアップインデックスとして使用します(最終的には、はになります。これはVT-100をエミュレートしてもUnicodeコードポイントを返します)。
window.addch('π')
window.border('π')
argument 1 or 3 must be a ch or an int
ではPython 2.7に失敗します。次の仕様が理由ですPython 3.2では、文字の代わりに単にスペースをレンダリングします。 'π'
と指定したとき。それは単にPythonの2.7と3.2の両方に何も(スペース)をレンダリングしていない...
window.addch(0x03C0)
window.border0x03C0)
:私たちは、Unicodeコードポイントを指定しても - 私たちは、実際にはUTF-8エンコーディング[0xCF、0x80の]を指定しました。言われていること
- 機能addstr
はUTF-8でエンコードされた文字列を受け入れ、正常に動作しない:
window.addstr('π')
...しかし、国境のため - border()
が明らかにaddch()
と同じ方法で文字を処理しますので、 - 明らかに、ACS
定数として明示的に指定されていないものについては、運が悪いと思われます(そのうちの多くもそうではありません)。
希望すると、誰かに役立ちます。
乾杯!
感謝を。使用可能なACSの定義をPythonの 'curses'からダンプするには、次のようにします:' python -c 'import pprint、inspect、curses; curses.initscr(); outstr = pprint.pformat(inspect.getmembers(curses)); curses.endwin();プリント(outstr) '| grep ACS'を実行します。乾杯! – sdaau