Unicodeサポート

Clickは様々な環境でUnicodeテキストをサポートするために特別に注意しなければならない。

  • Unixにおける命令行は従来,Unicodeではなくバイトである.コード提示はあるが,場合によっては中断する可能性がある.最も一般的な1つは,異なる地域の機器へのSSH接続である.

    往復エージェントの転送支援が不足しているため,誤って配置された環境は広範なUnicodeの問題を招く可能性がある.これはClick自身では修復されない!

  • デフォルトの場合、標準入出力はテキストモードで開きます。場合によっては、クリックはバイナリモードでストリームを再開しなければなりません。これをするための標準的な方法がないので、それはいつも効果的ではないかもしれない。まず,コマンドラインアプリケーションをテストする際に問題となる可能性がある.

    これは支持されていません

    sys.stdin = io.StringIO('Input here')
    sys.stdout = io.StringIO()
    

    代わりに、以下の動作を実行する必要があります。

    input = 'Input here'
    in_stream = io.BytesIO(input.encode('utf-8'))
    sys.stdin = io.TextIOWrapper(in_stream, encoding='utf-8')
    out_stream = io.BytesIO()
    sys.stdout = io.TextIOWrapper(out_stream, encoding='utf-8')
    

    この場合、ご利用いただく必要があることを覚えておいてください out_stream.getvalue() ではなく sys.stdout.getvalue() ラッパがこの方法を転送しないので、バッファコンテンツにアクセスしたい場合。

  • sys.stdin, sys.stdout and sys.stderr are by default text-based. When Click needs a binary stream, it attempts to discover the underlying binary stream.

  • sys.argv いつもテキストです。これは,Clickにおけるタイプの入力値のネイティブタイプがバイトではなくUnicodeであることを意味する.

    端末の設定が正しくなく、Pythonがコードを識別できない場合、問題になります。この場合,Unicode文字列はエージェントが変換するように符号化された誤りバイトを含む.

  • ファイルを処理する際には,ClickはつねにUnicodeファイルシステムAPIを使用し,オペレーティングシステムのレポートや推測されたファイルシステムを用いて符号化する方法である.ファイル名はエージェントをサポートしているので,通過できるはずである. File 環境配置が間違っていても,キーを入れる.

代理処理.

標準ライブラリ内のすべてのUnicode処理をクリックして実行し、そのアクションの影響を受けます。Unicodeは特に気をつけなければならない。これは,コンパイル検出がインタプリタで行われており,Linuxや何らかの他のオペレーティングシステムでは,そのコード処理に問題があるためである.

Unicode言語環境が導出されない限り、initシステム、展開ツール、またはcronジョブによって呼び出されるClickスクリプトは、作業を拒否することに最も落胆している。

Clickがこのような環境に遭遇した場合、それはあなたが領域設定を強制するためにさらに実行されることを阻止します。なぜなら,Clickが呼び出されるとシステムの状態を知ることができず,PythonのUnicode処理が発効するまでこれらの値を回復することができないからである.

以下のようなエラーを見ると:

Traceback (most recent call last):
  ...
RuntimeError: Click will abort further execution because Python was
  configured to use ASCII as encoding for the environment. Consult
  https://click.palletsprojects.com/unicode-support/ for mitigation
  steps.

あなたが処理している環境で、PythonはASCIIデータしか使用できないと思います。あなたのコンピュータが動作するエリア設定によって、これらの問題の解決策が異なります。

例えばドイツのLinuxコンピュータを持っていれば、領域設定を導出することができます de_DE.utf-8 **

export LC_ALL=de_DE.utf-8
export LANG=de_DE.utf-8

もしあなたがアメリカの機械を使っているなら en_US.utf-8 あなたが選んだ符号化方式です。新しいLinuxシステムでは C.UTF-8 領域設定として:

export LC_ALL=C.UTF-8
export LANG=C.UTF-8

報道によるといくつかのシステムでは UTF-8 書かなければならない UTF8 その逆も同様である。どのエリア設定をサポートしているかを見るには、呼び出すことができます locale -a それがそうです。

Pythonスクリプトを呼び出す前に値を導出する必要があります。

Python 3.7以降では、もはや取得されません RuntimeError 多くの場合これは PEP 538 そして PEP 540 これは、未構成環境におけるデフォルトの仮定を変更します。これはあなたの領域設定が間違っている可能性のある一般的な問題を変更しません。