2016-11-29 14 views
6

मुझे एक व्हाइटस्पेस के साथ चरित्र" »" स्ट्रिंग में प्रतिस्थापित करने की आवश्यकता है, लेकिन मुझे अभी भी एक त्रुटि मिलती है। इस कोड का उपयोग मैं है:पायथन - स्ट्रिंग में गैर-एसीआई चरित्र को बदलें (»)

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

# other code 

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

UnicodeEncodeError: 'ascii' codec can't encode character u'\xbb' in position 13: ordinal not in range(128)

लेकिन यदि मैं यह अन्य स्क्रिप्ट के साथ यह परीक्षण:

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

यह काम करता है। यही कारण है?

+1

आपको जो त्रुटि मिलती है उसे गुगल करने के लिए, मुझे यह वापस मिल जाता है: http://stackoverflow.com/questions/5141559/unicodeencodeerror-ascii-codec-cant-encode-character-u-xef-in-position-0 वहां कुछ ऐसा होना चाहिए जिसका आप उपयोग कर सकते हैं –

उत्तर

8

str.replace() विधि का उपयोग कर स्ट्रिंग की सामग्री को प्रतिस्थापित करने के लिए;

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

तुम भी स्ट्रिंग से सभी गैर- ASCII वर्ण दूर करने के लिए निम्नलिखित regex का उपयोग हो सकता है::

आप सबसे पहले स्ट्रिंग डिकोड, तो पाठ की जगह और मूल पाठ करने के लिए इसे वापस सांकेतिक शब्दों में बदलना करने की जरूरत है
>>> import re 
>>> re.sub(r'[^\x00-\x7f]',r'', 'hi »') 
'hi ' 
2

@Moinuddin क़ादरी का जवाब अपने यूज-केस बेहतर फिट बैठता है, लेकिन सामान्य रूप में, एक आसान तरीका एक दिया स्ट्रिंग से गैर- 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)) 

लेकिन उस बारे में 30% char for char ... दृष्टिकोण की तुलना में धीमी है।

संबंधित मुद्दे