私は広範囲に調査しましたが、この質問に答えるためのリソースがたくさんありましたが、実用的な回答は得られていないようです。私はUnicodeのNed Batchelder(https://nedbatchelder.com/text/unipain.html)からこの話を見て、S.O.の多くの解答を読みました。しかし、私はまだ失われています。bs4ナビゲート可能な文字列をPythonリストでエンコードする方法は?
私はPython 3とBeautifulSoup 4を使用して、ウィキペディアのテーブルを切り取り、解析しています。私はfighter_B
print(type(fighter_B))
<class 'list'>
print(type(fighter_B[0])
<class 'bs4.element.NavigableString'>
一覧の2番目および3番目の観測値は、例えば、ファブリシオ・ヴェウドゥムがエラーをスロー非enlgish文字で名前が含まれていると呼ばれるリストを持っています。私が試してみて、私はこのエラーを取得する戦闘機の名前、
print(fighter_B[1])
UnicodeEncodeError: 'ascii' codec can't encode character '\xed' in position 4: ordinal not in range(128)
を印刷するとき、私は様々なエンコーディング機能を試してみたが、私はいつも同じエラーを投げてしまいます。
[fighter.encode('utf-8') for fighter in fighter_B]
print(fighter_B[1])
UnicodeEncodeError: 'ascii' codec can't encode character '\xed' in position 4: ordinal not in range(128)
for i in fighter_B:
i.encode('utf-8')
print(fighter_B[1])
UnicodeEncodeError: 'ascii' codec can't encode character '\xed' in position 4: ordinal not in range(128)
[fighter.decode('utf-8') for fighter in fighter_B]
AttributeError: 'NavigableString' object has no attribute 'decode'
[str(fighter).decode('utf-8) for fighter in fighter_B]
AttributeError: 'str' object has no attribute 'decode'
[fighter.encode('ascii') for fighter in fighter_B]
UnicodeEncodeError: 'ascii' codec can't encode character '\xed' in position 4: ordinal not in range(128)
私が見てきた様々な答えはすべて、変数を 'utf-8'にエンコードすることを示唆しています。私はここでエンコーディングがなぜ機能していないのか分かりません。リスト内の各項目が 'bs4.element.NavigableString'型であることが原因であるかどうかは疑問です。私はこの時点で完全に困惑していると感じるので、任意のヒントは非常に高く評価されるだろう。
デフォルトソースエンコーディングとは何ですか?それがutf-8なら、それは動作しているはずです。 –
print(sys.getdefaultencoding())は、 "utf-8"を生成します。それは、それが動作するはずであることを意味する場合は気になります – buchmayne
Python3を使用していますか? –