Pythonのstring.printableに印刷できない文字が含まれているのはなぜですか?

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

  •  03-07-2019
  •  | 
  •  

質問

1つの質問に2つのString.printableミステリーがあります。

最初に、Python 2.6で:

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'

文字列の末尾を見ると、「\ x0b \ x0c」が親指のように突き出ているのがわかります。なぜ彼らはそこにいるのですか?私はオーストラリアの設定に設定されたマシンを使用しているので、アクセント記号付きの文字などはありません。

次に、このコードを実行してみてください:

for x in string.printable: print x,
print
for x in string.printable: print x

最初の行は、スペースで区切られたすべての文字を正常に印刷します。 2つの奇妙なキャラクターは、男性と女性のシンボルになります。

2行目は、改行で区切られた最後以外のすべての文字を正常に印刷します。男性のシンボルが印刷されます。女性のシンボルは欠落している文字(ボックス)に置き換えられます。

Pythonは性別を偏らせることを意図したものではなかったと思いますが、違いは何ですか?

役に立ちましたか?

解決

「印刷可能」には違いがあります。 「画面に表示できます」。ご使用の端末では、低ASCIIコードのプリンター制御コード0x0Bおよび0x0Cがオスとメスのシンボルとして表示されます。これは、フォントのインデックスに含まれているものだからです。これらの文字は、垂直タブ文字とフォームフィード文字としてより正確に記述されます。これらの2つの文字は、\ t \ rおよび\ nとともにすべて印刷可能であり、プリンターで適切に定義されています。

他のヒント

cmd.exe内から:

>>> print '\x0b'
♂
>>> print '\x0c'
♀
>>> print '\f' # form feed
♀
>>> print '\v' # vertical tab
♂
>>>

Emacsの内部:

>>> print '\f\v'
^L^K

formats(5)からの抜粋です。 'のマニュアルページ:

| Sequence | Character    | Terminal Action                             |
|----------+--------------+---------------------------------------------|
| \f       | form-feed    | Moves the printing position to the initial  |
|          |              | printing position of the next logical page. |
| \v       | vertical-tab | Moves the printing position to the start of |
|          |              | the next vertical tab position. If there    |
|          |              | are no more vertical tab positions left on  |
|          |              | the page, the behavior is undefined.        |
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top