2016-12-31 7 views
4

をエンコードすることはできませんが、私はすでに問題に走りました。
私はちょうど1つのコマンドで簡単なスクリプトを持っている:私はKubuntuのを使用していますPythonの3 UnicodeEncodeErrorを:「ASCII」コーデックは、私はちょうどのPythonを学ぶために始めました文字

Traceback (most recent call last): 
    File "hello.py", line 2, in <module> 
    print("P\u0159\xedli\u0161 \u017elu\u0165ou\u010dk\xfd k\u016fn \xfap\u011bl \u010f\xe1belsk\xe9 \xf3dy.") 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128) 

#!/usr/bin/env python3 
print("Příliš žluťoučký kůň úpěl ďábelské ódy.") # Text in Czech 

私はこのスクリプトを実行しようとすると:

python3 hello.py 

を、私はこのメッセージを取得します16.04およびPython 3.5.2。 私はこれを試したときに:export PYTHONIOENCODING=utf-8それは一時的に働いた。次回はバッシュを開いたときに同じエラーが出ました。

https://docs.python.org/3/howto/unicode.html#the-string-type によると、PythonソースコードのデフォルトエンコードはUTF-8です。
は、だから私は、ソースファイルが保存されたID UTF-8、konsoleのは、UTF-8に設定されているが、私はまだエラーを取得する必要があります!
は、私が先頭に

# -*- coding: utf-8 -*- 

を追加する場合であっても、それは何もしません。

もう奇妙なこと:私だけのpythonを使用して、それを実行すると、ないのpython3は、それが動作します。 3.5.2ではなく、Python 2.7.12でどのように作業することが可能ですか?

永久にこれを解決するための任意のアイデア?ありがとうございました。問題があることも示唆どこためマークtolenのアラステア・マコーマック

+1

ですね

localeを実行すると、今、この出力を返します。そのため、Unicodeを印刷するときにPythonがデフォルトで 'ascii'に設定されています。 [ファイルへの書き込みUnicodeEncodeErrorを]の –

+0

可能な複製(http://stackoverflow.com/questions/32924147/unicodeencodeerror-when-writing-to-file) –

+0

あなたのロケールが壊れなければなりません。おそらくあなたの.bashrcはLANG = cs_CZを設定します。UTF-8'を使用していますが、チェコ語のロケールを構築/インストールしていませんか?あなたのロケールが壊れているか見つからない場合、PythonはASCIIエンコーディングにデフォルト設定されます。 Python 2で動作する理由は、文字列がバイト文字列であり、単に端末に直接書き込まれるためです。 Python 3は、端末に書き込むときに文字列をエンコードする必要があります。 –

答えて

4

感謝。問題は本当にロケールの設定にありました。私はlocaleを走った
は、出力されました:

LANG=C 
LANGUAGE= 
LC_CTYPE="C" 
LC_NUMERIC=cs_CZ.UTF-8 
LC_TIME=cs_CZ.UTF-8 
LC_COLLATE=cs_CZ.UTF-8 
LC_MONETARY=cs_CZ.UTF-8 
LC_MESSAGES="C" 
LC_PAPER="C" 
LC_NAME="C" 
LC_ADDRESS="C" 
LC_TELEPHONE="C" 
LC_MEASUREMENT=cs_CZ.UTF-8 
LC_IDENTIFICATION="C" 
LC_ALL= 

この "C" はANSIのcharmapのを使用して、デフォルトの設定です。それが問題の原因です。 locale charmapを実行すると、英語以外の文字を表示できないANSI_X3.4-1968が表示されます。
Ubuntu documentation siteを使用してこれを修正しました。

私は/etc/default/localeにこれらの行を追加しました:

LANGUAGE=cs_CZ.UTF-8 
LC_ALL=cs_CZ.UTF-8 

を次にあなたがこれらの設定を適用するには(ログアウトしで)あなたのセッションを再起動する必要があります。

LANG=C 
LANGUAGE=cs 
LC_CTYPE="cs_CZ.UTF-8" 
LC_NUMERIC="cs_CZ.UTF-8" 
LC_TIME="cs_CZ.UTF-8" 
LC_COLLATE="cs_CZ.UTF-8" 
LC_MONETARY="cs_CZ.UTF-8" 
LC_MESSAGES="cs_CZ.UTF-8" 
LC_PAPER="cs_CZ.UTF-8" 
LC_NAME="cs_CZ.UTF-8" 
LC_ADDRESS="cs_CZ.UTF-8" 
LC_TELEPHONE="cs_CZ.UTF-8" 
LC_MEASUREMENT="cs_CZ.UTF-8" 
LC_IDENTIFICATION="cs_CZ.UTF-8" 
LC_ALL=cs_CZ.UTF-8 

、実行locale charmapリターン:ご使用の環境がUTF-8用に正しく構成されていないよう

UTF-8 
関連する問題