2017-06-02 4 views
0

データをstdoutに印刷する際に問題があります。私はUnicodeとAsciiのコンセプトを理解していますが、なぜ印刷命令がうまくいかないのか分かりません。Unicode、stdoutへの印刷、何が起こっていますか?

コンピュータゲームのFallout ShelterのJSONファイルからデータを再生しています。

for i in jsondata["dwellers"]["dwellers"]: 
     print "{},{} {},{}".format(f,i["name"],i["lastName"],i["relations"]) 

私が取得エラー:

私はデータを印刷しよう

Traceback (most recent call last): 
    File "f:\FOSScript\Tree.py", line 81, in <module> 
    tree() 
    File "f:\FOSScript\Tree.py", line 76, in tree 
    graphing(jsondata) 
    File "f:\FOSScript\Tree.py", line 35, in graphing 
    print "{} {}".format(i["name"],i["lastName"]) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3: ordinal not in range(128) 

uは '\ XE9' フランスのアクセントです。

しかし、私はコードで:

prenom = u'Val\xe9rie' 
print prenom 

名が正しく印刷されます。

次の手順:

print locale.getpreferredencoding() 
print sys.stdout.encoding 

がプリント以下:

cp1252 
cp850 

(Wikipediaでチェックすると)両方のコードページでは、アクセント文字が含まれています。

フランス語版のWindows 10です。 Python 2.7.13。

==========================

  • なぜテーブルからの印刷がうまくいかないんが、印刷変数は機能しますか? thisページで

  • は、というコメントがあり

ザ・Pythonでのみサポートされるデフォルトのエンコーディングは以下のとおりです。

のPython 2.xの:ASCII
のPython 3.xの:UTF -8

ASCIIとは、アクセント付きの拡張ASCIIを意味しますか? JSONのデータにはアクセントが含まれていますが、Pythonは単にそれを印刷できません。

ありがとうございました!

答えて

1

ユニコード文字以外の文字列で文字列フォーマットを使用しようとしているという問題があります。代わりにあなたが欲しい:

for i in jsondata["dwellers"]["dwellers"]: 
     print u"{},{} {},{}".format(f,i["name"],i["lastName"],i["relations"]) 

2番目の行の引用符の前に余分なuがあることに注意してください。パイソンの

テストこれは2.7

print u"{}".format(u'\xe9') 

が正常に動作します。

関連する問題