問題
これをペルシア語の文字に遭遇した)。 chcp 65001
コードページでPythonを使用して、1つのUnicode文字を入力しようとすると、Pythonはエラーなしで終了します。CHCP 65001のコードページの結果
私はこの問題を無駄に解決しようと努力しました。しかし今日、私はpython websiteのスレッドを見つけました。もう1つはMySQLです。もう1つの解決策や説明がなくても、Lua-usersはこの突然の終了に関する問題を提起しています。chcp 65001
は本質的に壊れています。
この問題がchcp-design-relatedであるか、回避策があるかを一度知っておくとよいでしょう。
再現エラー
chcp 65001
Pythonの3.X:
Pythonがシェル
print('ä')
結果は:それはちょうど
しかしシェルを終了し、これはpython.exe -c "print('ä')"
との作品もこの:print('\u00e4')
結果:
print('ä')
結果:私はこれまでの観測が出ているprint('\xc3\xa4')
:コマンドプロンプト作品と
- 直接出力、それだけで
しかし、この作品のシェルを終了します。
- 文字のUnicodeベースの16進数に相当する文字が動作します。
だから これは(私がCmderを使用しています私たちは、WindowsのコマンドプロンプトやConemu、CmderのようなそのラッパーのいずれかにCLIプログラムで直接Unicode文字を使用することはできませんPythonのバグとではありませんWindowsシェルでUnicode文字を見たり使えるようにするために、問題なく使用しました。これは正しいです?
多くのPythonバージョンがインストールされています。 Windows 10 64ビット版、Python 3.3.5 64ビット版、またはPython 3.5.2 64ビット版では再現できませんでしたが、Python 2.7.12 32ビット版では再現できませんでした。これは説明したように終了しますが、あなたはPython 3を使用していると言いました。おそらく、32ビットと64ビットのどちらの問題でしょうか? Windowsのcmd.exeコンソールなどを使用していますか? –
@MarkTolonenこれは、コードページ65001用に設計されていないコンソール(conhost; cmdは単なるシェル)を使用すると、すべてのWindowsバージョンで再現可能です。ASCII以外の文字を1つ入力すると、空読み込みが発生します。 'input'をEOFとして扱います。問題はconhost.exeがUTF-16入力バッファーをANSIコードページにエンコードして1文字あたり1バイトであると仮定しているため、ASCII以外のUTF-8では 'WideCharToMultiByte'エンコードバッファーが小さすぎます。読み込みは失敗しますが、0バイトの「成功した」読み込み、つまりファイルの終わりとしてクライアントに返されます。 – eryksun
@eryksun、はい、壊れていますが、64ビット版のWindows 10上の64ビットPythonでは、国際化IMEでcmd.exe 'print( 'ä')'をタイプして印刷できます正しくしたがって、少なくともこの特定の例では、「すべてのWindowsで再現可能」バージョンが不正確です。 –