2017-03-15 5 views
1

PyCharmと私が取り組んでいるPythonアプリケーションで非常に奇妙な問題があります。PyCharmで実行されているPython 3.6スクリプトでUTF-8でエンコードされたファイルを開く2016.3.2

  • PycharmはPyCharmコミュニティ版2016年3月2日
  • あるプロジェクトインタプリタがある:私はいくつかの時間のための解決策をグーグルでてきたのですとおり3.6.0
  • OSはMacOSのシエラ

です提案されたアイデアは私がここで尋ねるのを助けません。

は、私は次のコードを使用してUTF-8でエンコードされたファイルを開くようにしたい:PyCharmで実行した場合

#!/usr/bin/env python3  

import os, platform 

def read(file): 
    f = open(file, "r") 
    content = f.read() 
    f.close() 
    return content 

print(platform.python_version()) 
print(os.environ["PYTHONIOENCODING"]) 

content = read("testfile") 
print(content) 

コードがクラッシュします。

./file.py 
3.6.0 
utf-8:surrogateescape 
I am a file with evil unicode characters: äöü 

私は同等の状況では、人々は、変数PYTHONIOENCODINGに環境を設定することをお勧めしていることを見出した:出力は、私は、コマンドラインから、同一のコードを実行すると、それだけで正常に動作

3.6.0 
UTF-8 
Traceback (most recent call last): 
    File "/Users/xxx/Documents/Scripts/pycharmutf8/file.py", line 14, in <module> 
    content = read("testfile") 
    File "/Users/xxx/Documents/Scripts/pycharmutf8/file.py", line 7, in read 
    content = f.read() 
    File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py", line 26, in decode 
    return codecs.ascii_decode(input, self.errors)[0] 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 5: ordinal not in range(128) 

です>ビルド - 私は(あなたが出力の上で見ることができるように)システム全体の

export PYTHONIOENCODING=utf-8:surrogateescape 

もPyCharm自体(設定でやったutf-8:surrogateescape - >コンソール - > Pythonコンソール - >環境変数)。

これは何の効果もありません。さらなる提案はありますか?

+1

は 'open'は、'エンコーディングを推測するために 'locale.getpreferredencoding(false)を使用していますナル。 – MatsLindh

答えて

0

あなたはUTF8ファイルを読みたい場合は、エンコーディングを指定します。それは図書館で起こっている。すなわち、それはオープン呼び出しのエンコーディングを変更するには難しくなっている場合

def read(file): 
    with open(file, encoding='utf8') as f: 
     content = f.read() 
+1

ありがとうございます。それが私の問題を解決しました。しかし、なぜ同じコードがTerminal(作業中)とPyCharm(動作しなかった)で異なった振る舞いをするのだろうかと思います。 – drscheme

+0

@Matsのコメントによると、Pycharmと端末は異なるロケールに設定する必要があります。エラーはASCIIがデフォルトであることを示し、Pythonはロケールを認識できないときにこれを選択します。 –

0

あなたが実行でこの環境変数を変更することができます構成:LC_CTYPE=en_US.UTF-8

出典:私の推測では、PyCharmによって設定されたロケールがあなたのTERMI異なっているということですので、 PyCharm is changing the default encoding in my Django app

関連する問題