316

現在、Beautiful Soupを使用してHTMLファイルを解析し、を呼び出しget_text()ていますが、スペースを表す\xa0Unicodeがたくさん残っているようです。Python 2.7でそれらをすべて削除し、スペースに変更する効率的な方法はありますか?もっと一般的な質問は、Unicodeフォーマットを削除する方法はありますか?

line = line.replace(u'\xa0',' ')別のスレッドで提案されているように、:を使用してみましたが、\ xa0がuに変更されたため、代わりに「u」がどこにでもあります。):

編集:問題はによって解決されたようですが、せずstr.replace(u'\xa0', ' ').encode('utf-8')に実行すると、さらに奇妙な文字、たとえば\xc2が吐き出されるようです。誰かがこれを説明できますか?.encode('utf-8')replace()

4

14 に答える 14

367

\ xa0は、実際にはLatin1(ISO 8859-1)のノーブレークスペースであり、chr(160)でもあります。スペースに置き換える必要があります。

string = string.replace(u'\xa0', u' ')

.encode('utf-8')の場合、Unicodeをutf-8にエンコードします。つまり、すべてのUnicodeを1〜4バイトで表すことができます。この場合、\xa0は2バイトの\xc2\xa0で表されます。

http://docs.python.org/howto/unicode.htmlを読んでください。

注意:2012年からのこの回答、Pythonは移行しました、unicodedata.normalize今すぐ使用できるはずです

于 2012-07-19T17:42:44.883 に答える
26

行の最後で .strip() を使用してみて line.strip()ください

于 2015-07-21T21:50:36.607 に答える
13

Pythonを使用してsqlite3データベースからデータを取得する際に、この同じ問題に遭遇しました。上記の答えは私にはうまくいきませんでしたが (理由はわかりません)、これはうまくいきました:line = line.decode('ascii', 'ignore')ただし、私の目標は \xa0s をスペースに置き換えるのではなく削除することでした。

これは、Ned Batchelder によるこの非常に役立つ Unicode チュートリアルから入手しました。

于 2012-12-11T20:39:35.243 に答える
8

印刷できない文字の問題をグーグルで検索しているときに、ここに行き着きました。私は MySQL を使用しUTF-8 general_ciており、ポーランド語を扱っています。問題のある文字列については、次のように処理する必要があります。

text=text.replace('\xc2\xa0', ' ')

これは迅速な回避策であり、適切なエンコーディング設定で何かを試す必要があります。

于 2014-02-22T12:09:07.290 に答える
4

0xA0 (Unicode) は UTF-8 では 0xC2A0 です。.encode('utf8')Unicode 0xA0 を取得し、UTF-8 の 0xC2A0 に置き換えます。したがって、0xC2s の出現は...おそらくお気づきのように、エンコーディングは置き換えられません。

于 2012-06-12T12:02:29.257 に答える
4

Beautiful Soup ではget_text()、テキストの最初と最後から空白を削除する strip パラメータを渡すことができます。\xa0これにより、または文字列の先頭または末尾にあるその他の空白が削除されます。美しいスープは空の文字列を置き換え、\xa0これで問題が解決しました。

mytext = soup.get_text(strip=True)
于 2015-01-19T14:51:48.697 に答える
1

正規表現を使用した一般的なバージョン (すべての制御文字が削除されます):

import re
def remove_control_chart(s):
    return re.sub(r'\\x..', '', s)
于 2018-07-02T12:28:45.570 に答える
0

あなたは試すことができstring.strip()
ます :)

于 2021-01-30T14:13:44.253 に答える