web-dev-qa-db-ja.com

Python-文字列の非ASCII文字を置換(»)

文字列内の文字「"」を空白に置き換える必要がありますが、それでもエラーが発生します。これは私が使用するコードです:

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup

# other code

soup = BeautifulSoup(data, 'lxml')
mystring = soup.find('a').text.replace(' »','')

UnicodeEncodeError: 'ascii'コーデックは位置13の文字u '\ xbb'をエンコードできません:順序は範囲外(128)

しかし、この他のスクリプトでテストする場合:

# -*- coding: utf-8 -*-
a = "hi »"
b = a.replace('»','') 

できます。なんでこれ?

13
Hyperion

str.replace()メソッドを使用して文字列の内容を置換するには、最初に文字列をデコードしてから、テキストを置き換えて元のテキストにエンコードする必要があります。

>>> a = "hi »"
>>> a.decode('utf-8').replace("»".decode('utf-8'), "").encode('utf-8')
'hi '

次の正規表現を使用して、文字列から非ASCII文字をすべて削除することもできます。

>>> import re
>>> re.sub(r'[^\x00-\x7f]',r'', 'hi »')
'hi '
16

@Moinuddin Quadriの答えはあなたのユースケースにより良く適合しますが、一般的に、与えられた文字列から非ASCII文字を削除する簡単な方法は以下を実行することです:

# the characters '¡' and '¢' are non-ASCII
string = "hello, my name is ¢arl... ¡Hola!"

all_ascii = ''.join(char for char in string if ord(char) < 128)

この結果:

>>> print(all_ascii)
"hello, my name is arl... Hola!"

これを行うこともできます:

''.join(filter(lambda c: ord(c) < 128, string))

ただし、char for char ...アプローチよりも約30%遅くなります。

6
blacksite