2017-06-21 10 views
-2

私は厄介な問題を抱えていますが、テキスト文書に一連のjsonデータを書き込もうとしていますが、PythonはいつでもUnicodeEncodeErrorを発生させますこれらの種類の文字に遭遇する。Pythonはテキスト文書に「♥」文字を書きません

のpython 3との大きなアップデートを1として、これらの文字は、私はまだのpythonに初心者だとして、我々は

with open("filename.txt", "a") as file 
file.write("I ♥ ice cream") 
file.close() 

に行くとき、うまくコンソールにその問題を印刷し、私はそうではありません若干の手がかりをどのようにこれを解決するために、任意のアイデア?

+0

[write ) - Python 3.xでエンコードされた文字列を作成する](https://stackoverflow.com/questions/7372974/write-ing-an-encoded-string-in-python-3-x) – JJJ

+0

あなたは ' 'with open(...) 'ブロックを使用しているのにコロンと分かりやすいインデントが必要な場合は、file.close() – khelwood

+0

あなたのコードの構文修正版は、Python 3.5でも問題なく動作します。 http://imgur.com/a/GxQ0s – ayhan

答えて

1

はこの1つを解決する方法を発見します!

最初に私は正しい軌道を暗示するために@JJJに感謝したいと思いますが、私の唯一の批判は、提示された解決策はそれほど単純ではなく、バイトの意義を知らない人これはかなり難しい問題です。

は基本的に問題はCP1252であること、私のコンピュータが使用する(OSが標準で10を獲得している)エンコーディングのデフォルトの方法で行うことでした。

のpythonに入ると、プログラムはこれをテストするためのコードの単純なビットを実行した、それはより明確な問題を示しているので、我々はより現実的な解決策を見つけることができます。

UnicodeEncodeError: 'charmap' codec can't encode character '\u2665' in position 2: character maps to <undefined> 

ああ:

text = "I ♥ IceCream" 
text = text.encode("cp1252") 
open('People Jobs.txt','a').write(text) 

IDLEでこれを実行するには、我々はこれを取得します!今私たちの問題を見ることができます!コーデックは文字をエンコードできません!私たちはそうのようなファイルに書き込む前に、UTF-8を使用して文字列をエンコードすることができ、これを知っている:

text = "I ♥ IceCream" 
text = text.encode("utf-8") 
open('People Jobs.txt','a').write(text) 

がこれを実行すると、我々は最終的に取得する:

ファイルへの心配を書き込むことはできません
b'I \xe2\x99\xa5 IceCream' 

。私たちは、decodeメソッドを使用して、元のメッセージに、この背を向けることができ、しかし私の目的のために、我々はそれをする必要はありません。

また、私は自分のポストにコメントした人に感謝の意を表したいと思います。パイソン言語の広範な知識はかなりの資産であり、私は大いに感謝しています。

うまくいけば、私の過失は、彼らがこの投稿を

で笑って来るしかし、私は名前を持っている理由ちょっとそれはだときに、これらの簡単なプログラミングの原則は、他の人の利益になるご覧いただけます!

だから、次回まで、

  • 氏無能

P.S @Pratik Kこれをよりコンパクトに書く方法を思い出してくれてありがとう、私はそれを感謝します:)(C++をやってきたので、私はPythonについて忘れてしまった)

+0

ここで重要なのは、Windows上ではデフォルトで 'cp1252'を使用しているという事実です。これらの応答は、おそらくデフォルトで 'utf-8'エンコーディングを使用していると言います。あなたがPythonファイルのエンコーディングを 'utf-8'に変更すると、これもうまくいくかもしれません。そのため、どんな文字列も既にunicodeです(この権利があることを願って、[python docs for this](https://docs.python。 org/3/howto/unicode.html))。 –

0

私はそれを試してみたが、うまく動作するようです。 open(filename, 'a').write(string):ちょうどサイドノートでは、代わりにwith ...を使用しての、あなただけのと同様にこれを書くことができます。これは、ファイルを開く/書き込み、それに追加して、すべて1行以内、それを閉じます。 だけ明確にすることが、あなたのソリューションのための構文は次のようになります。

with open("filename.txt", 'a') as file: 
    file.write("I ♥ ice cream") 
+0

まだ私のために働いていない、あなたはIDLEを使用していますか?とPythonのどのバージョン? –

+0

@Mr_incompetent私はPython 3.5.2とPython 3.6.0の両方で試してみましたが、両方でうまく動作します。あなたがそれを解決したように見える、私はいくつかの助けになることができてうれしい。 –

+0

ありがとうございましたあなたは今夜資産になってくれてありがとう、私は本当にあなたの助けに感謝します:) –

関連する問題