2017-09-06 9 views
1

したがって、BeautifulSoupを使用しています。それは私にいくつかのHTMLノードのテキストを取得しますが、これらのノードは、例えば、文字列PythonでエスケープされたUnicodeシーケンスをUTF-8に変換する

、これを持っているHTML要素にエスケープシーケンスに変換される一部のUnicode文字を、持っている: : は50 €は似BeautifulSoupによって取得されますsoup.find("h2").textはこの文字列として50\u20acです。これはPythonコンソールでのみ読み取ることができます。 しかし、それはJSONファイルに書き込まれると判読できなくなります。 注:このコードを使用してjsonに保存します。 with open('file.json', 'w') as fp: json.dump(fileToSave, fp) これらのUnicode文字をUTF-8に変換するにはどうしたらよいですか?

+0

は、あなたが試してみました: F =オープン( 'somefileという'、 'WB')、その後 f.writeを( 'your text') –

+0

** JSON **に保存されたことはどういう意味ですか?あなたはJSONをいくつかの他の関数に返すか、それをファイルに書いていますか? – chad

+0

@chad JSONファイルに書き込まれます。 –

答えて

2

小さなデモ、非ASCIIはUnicodeのエスケープコードをJSONに書き込まれます。 JSONを読み込む機能には影響しませんが、.jsonファイル自体は読みにくいです。 out.jsonの

Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from bs4 import BeautifulSoup 
>>> html = '<element>50\u20ac</element' 
>>> html 
'<element>50€</element' 
>>> soup = BeautifulSoup(html,'html') 
>>> soup.find('element').text 
'50€' 
>>> import json 
>>> with open('out.json','w',encoding='utf8') as f: 
... json.dump(soup.find('element').text,f,ensure_ascii=False) 
... 
>>> ^Z 

コンテンツ(UTF-8でエンコードされた):

"50€" 
+0

ありがとう!それがうまくいきました。しかし、どうやってそれを正しくロードするのですか?今、私は、ファイルをロードするために、このコードを使用します。 json1_file =オープン(ファイル名+ '.jsonを') json1_str = json1_file.read() ファイル= json.loads(json1_str) が、文字は表示されません。正しくコメントにコードを正しく埋め込むことができませんでした。申し訳ありません。 –

+0

JSONは正しくレンダリングされますが、Pythonにロードすると、これは見た目が「50」になります。 –

+0

@MohamedOun 'encoding = 'utf8''でファイルを開きます。デフォルトではありません。 –

0

以下にしてみてください:Pythonの2.7の場合

utf8string = <unicodestring>.encode("utf-8") 
+0

問題は、ユニコード文字列ではなく文字列を返すことです。とにかく、その文字列をエンコードしようとしましたが、 'Object of type 'bytes'がJSONのシリアライザブルではないため、JSONに保存できません。 –

2

を、私はあなたがcodecsjson.dump(obj, fp, ensure_ascii=False)を使用することができると思います。例:あなたはensure_ascii=Falseを使用してJSONにダンプしていない場合はPython 3を使用して

import codecs 
import json 

with codecs.open(filename, 'w', encoding='utf-8') as fp: 
    # obj is a 'unicode' which contains "50 €" 
    json.dump(obj, fp, ensure_ascii=False) 
+0

私はPython3を使用していますが、そこでは動作しませんか? –

+0

@MohamedOun Python3では正常に動作しますが、間違っていることの例は示していませんので、修正することができます。 –

+0

@MarkTolonen値がUnicode文字の文字列である辞書があります。その辞書をJSONファイルとして保存しますが、Unicode文字は '\ u20ac'のように表示されます。詳細が必要ですか? –

関連する問題