Tôi đang gặp vấn đề với việc xử lý các ký tự unicode từ văn bản được tải từ các trang web khác nhau (trên các trang web khác nhau). Tôi đang sử dụng BeautifulSoup.
Vấn đề là lỗi không phải lúc nào cũng có thể lặp lại; đôi khi nó hoạt động với một số trang, và đôi khi, nó bị chặn bằng cách ném a UnicodeEncodeError
. Tôi đã thử mọi thứ tôi có thể nghĩ ra, nhưng tôi chưa tìm thấy bất cứ thứ gì hoạt động ổn định mà không gây ra một số lỗi liên quan đến Unicode.
Một trong những phần của mã gây ra sự cố được hiển thị bên dưới:
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()
Dưới đây là dấu vết ngăn xếp được tạo trên chuỗi MỘT SỐ khi đoạn mã trên được chạy:
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)
Tôi nghi ngờ rằng điều này là do một số trang (hoặc cụ thể hơn, các trang từ một số trang web) có thể được mã hóa, trong khi các trang khác có thể không được mã hóa. Tất cả các trang web đều có trụ sở tại Vương quốc Anh và cung cấp dữ liệu dành cho tiêu dùng ở Vương quốc Anh - vì vậy không có vấn đề nào liên quan đến nội địa hóa hoặc xử lý văn bản được viết bằng bất cứ thứ gì ngoài tiếng Anh.
Có ai có bất kỳ ý tưởng nào về cách giải quyết vấn đề này để tôi có thể khắc phục sự cố này không?
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