24

の要素はどのエンコーディングsys.argvで Python で使用されますか? それらはエンコーディングでエンコードされていsys.getdefaultencoding()ますか?

sys.getdefaultencoding(): Unicode 実装で使用される現在のデフォルト文字列エンコーディングの名前を返します。

PS:いくつかの回答で指摘されているようにsys.stdin.encoding、実際にはより良い推測になります。ただし、確かな情報源へのポインタを使用して、この質問に対する決定的な答えを見たいと思います!

PPS : Wim が指摘したように、Python 3 はstrオブジェクトを sys.argv に配置することでこの問題を解決します (私の理解が正しければ)。ただし、Python 2.x については未解決のままです。Unix では、LC_CTYPE 環境変数をチェックするのが正しいようですね。Windows で何をする必要がありますか (どのコンソールでも sys.argv 要素が正しく解釈されるようにするため)?

4

7 に答える 7

8

問題 2128に遭遇したため、これを求めていると思います。これは Python 3.0 で修正されていることに注意してください。

于 2010-11-03T09:44:46.523 に答える
6

いくつかの観察:

(1)確かにそうではありませんsys.getdefaultencoding

(2)sys.stdin.encodingはるかに良い賭けのようです。

(3)Windowsでは、実際の値はsys.stdin.encoding、stdioを提供しているソフトウェアによって異なります。IDLEは、システム「ANSI」コードページを使用します。たとえばcp1252、西ヨーロッパとアメリカのほとんど、およびそれらの以前の植民地で使用されます。ただし、MS-DOSを多かれ少なかれエミュレートするコマンドプロンプトウィンドウでは、対応する古いDOSコードページ(例:cp850)がデフォルトで使用されます。これは、CHCP(コードページの変更)コマンドを使用して変更できます。

(4)サブプロセスモジュールのドキュメントには、argsとstdoutに使用するエンコーディングに関する提案はありません。

assert sys.stdin.encoding == sys.stdout.encoding(5)決して失敗しない信頼。

于 2010-10-25T09:38:42.893 に答える
5

これが役立つかどうかはわかりませんが、DOS モードでは次のようになります。

C:\Python27>python Lib\codingtest.py нер
['Lib\\codingtest.py', '\xed\xe5\xf0']

C:\Python27>python Lib\codingtest.py hello
['Lib\\codingtest.py', 'hello']

アイドル時:

>>> print "hello"
hello
>>> "hello"
'hello'
>>> "привет"
'\xef\xf0\xe8\xe2\xe5\xf2'
>>> print "привет"
привет
>>> sys.getdefaultencoding()
'ascii'
>>> 

これから何を推測できますか?まだわかりません... 少しコメントします。

少し後:sys.argvでエンコードされ、エンコードされsys.stdin.encodingていないsys.getdefaultencoding()

于 2010-10-25T07:46:02.247 に答える
4

「Windows で何をすべきか (sys.argv 要素がコンソールに関係なく正しく解釈されるように)?」

Python 2.x については、issue2128 に関するこのコメントを参照してください。

(元の sys.argv のエンコーディングは正しくないことに注意してください。元に戻すのに十分な情報がない方法で一部の文字が破損している可能性があるためです。たとえば、ANSI コードページがギリシャ語のアルファを表すことができない場合、' a'.)

于 2011-01-10T01:37:24.733 に答える
4

Unix システムでは、(不思議なことに) に関連付けられていないユーザーのロケールにある必要がありますsys.getdefaultencodinghttp://docs.python.org/library/locale.htmlを参照してください。

Windows では、システムの ANSI コードページになります。

(ちなみに、文末に前置詞をつけてはいけないという小学校の先生は嘘をついていました。)

于 2010-10-25T07:34:14.637 に答える
0

sys.getfilesystemencoding() は、少なくとも Windows では機能します。Windows では実際には 'mbcs' であり、*nix では 'utf-8' です。

于 2016-12-09T16:18:33.337 に答える