ฉันมีปัญหาในการจัดการกับอักขระ Unicode จากข้อความที่ดึงมาจากหน้าเว็บต่างๆ (ในเว็บไซต์ต่าง ๆ ) ฉันใช้ BeautifulSoup
ปัญหาคือข้อผิดพลาดนั้นไม่สามารถทำซ้ำได้เสมอไป บางครั้งมันก็ทำงานร่วมกับบางหน้าและบางครั้งก็ barfs UnicodeEncodeError
โดยขว้างปา ฉันลองทุกอย่างที่ฉันสามารถคิดได้ แต่ถึงกระนั้นฉันก็ไม่พบสิ่งใดที่ทำงานได้อย่างต่อเนื่องโดยไม่ละทิ้งข้อผิดพลาดที่เกี่ยวข้องกับ Unicode
ส่วนหนึ่งของรหัสที่ทำให้เกิดปัญหาแสดงอยู่ด้านล่าง:
agent_telno = agent.find('div', 'agent_contact_number')
agent_telno = '' if agent_telno is None else agent_telno.contents[0]
p.agent_info = str(agent_contact + ' ' + agent_telno).strip()
นี่คือการติดตามสแต็กที่สร้างบนสตริง SOME เมื่อรันโค้ดย่อยด้านบน:
Traceback (most recent call last):
File "foobar.py", line 792, in <module>
p.agent_info = str(agent_contact + ' ' + agent_telno).strip()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
ฉันสงสัยว่าเป็นเพราะบางหน้า (หรือเฉพาะเจาะจงมากขึ้นหน้าจากเว็บไซต์บางแห่ง) อาจถูกเข้ารหัสในขณะที่บางหน้าอาจไม่ได้รับการเข้ารหัส เว็บไซต์ทั้งหมดอยู่ในสหราชอาณาจักรและให้ข้อมูลที่มีความหมายสำหรับการบริโภคในสหราชอาณาจักร - ดังนั้นจึงไม่มีปัญหาเกี่ยวกับการทำให้เป็นภายในหรือการจัดการกับข้อความที่เขียนด้วยภาษาอื่นนอกจากภาษาอังกฤษ
ใครบ้างมีความคิดเกี่ยวกับวิธีการแก้ปัญหานี้เพื่อให้ฉันสามารถแก้ไขปัญหานี้อย่างต่อเนื่อง?
import os; import locale; os.environ["PYTHONIOENCODING"] = "utf-8"; myLocale=locale.setlocale(category=locale.LC_ALL, locale="en_GB.UTF-8"); ... print(myText.encode('utf-8', errors='ignore'))
ลองนี้
$ export PYTHONIOENCODING=utf8