1

このコードの実行:

from bs4 import BeautifulSoup
soup = BeautifulSoup (open("my.html"))
print(soup.prettify())

このエラーが発生します:

Traceback (most recent call last):
  File "soup.py", line 5, in <module>
    print(soup.prettify())
  File "C:\Python33\lib\encodings\cp437.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u25ba' in position
9001: character maps to <undefined>

次に試しました:

print(soup.encode('UTF-8').prettify())

しかし、これはバイトオブジェクトを使用した文字列フォーマットのために失敗します。

Traceback (most recent call last):
  File "soup.py", line 11, in <module>
    print(soup.encode('UTF-8').prettify())
AttributeError: 'bytes' object has no attribute 'prettify'

これを解決する方法がわかりません。任意の入力をいただければ幸いです。

4

1 に答える 1

3

(Windows) コンソールがcp437エンコードを使用しており、そのエンコードでサポートされていない文字がスープに含まれています。デフォルトでは、この状況で例外をスローしますが、これは変更できます。

import sys,io
from bs4 import BeautifulSoup
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,'cp437','backslashreplace')
soup = BeautifulSoup (open("my.html"))
print(soup.prettify())

または、スープをファイルに書き込み、エンコーディングをサポートするエディターで読み取ります。

# On Windows, utf-8-sig will allow the file to be read by Notepad.
with open('out.txt','w',encoding='utf-8-sig') as f:
   f.write(soup.prettify())
于 2013-02-15T06:26:30.457 に答える