Sau khi hoạt động bạn thực hiện, bạn sẽ thấy:
>>> req.headers['content-type']
'text/html; charset=windows-1251'
và như vậy:
>>> encoding=req.headers['content-type'].split('charset=')[-1]
>>> ucontent = unicode(content, encoding)
ucontent
bây giờ là một chuỗi Unicode (của 140.655 ký tự) - ví dụ như vậy để hiển thị một phần của nó, nếu thiết bị đầu cuối của bạn là UTF-8:
>>> print ucontent[76:110].encode('utf-8')
<title>Lenta.ru: Главное: </title>
và bạn có thể tìm kiếm, v.v ...
Chỉnh sửa: Unicode I/O thường phức tạp (có thể là những gì đang nắm giữ người hỏi ban đầu) nhưng tôi sẽ bỏ qua vấn đề khó khăn khi nhập chuỗi Unicode vào trình thông dịch Python tương tác (hoàn toàn không liên quan đến câu hỏi gốc) để hiển thị như thế nào, một khi một chuỗi Unicode được nhập chính xác (tôi đang làm nó bằng codepoints - goofy nhưng không phức tạp ;-), tìm kiếm là hoàn toàn không có trí tuệ (và do đó hy vọng câu hỏi ban đầu đã được trả lời triệt để). Một lần nữa giả định một thiết bị đầu cuối UTF-8:
>>> x=u'\u0413\u043b\u0430\u0432\u043d\u043e\u0435'
>>> print x.encode('utf-8')
Главное
>>> x in ucontent
True
>>> ucontent.find(x)
93
Note: Hãy ghi nhớ rằng phương pháp này có thể không làm việc cho tất cả các trang web, kể từ một số trang web chỉ định mã hóa ký tự bên trong các tài liệu phục vụ (sử dụng thẻ meta http-equiv , ví dụ).
Nguồn
2009-06-20 04:17:41
Mã hóa được thực hiện bằng cách sử dụng hàm từ thư viện urllib không phải từ urllib2. Từ http://www.voidspace.org.uk/python/articles/urllib2.shtml#headers – Macarse
@Macarse đây không phải là mã hóa mà Vitaly đề cập đến, anh ta đang đề cập đến giải mã và mã hóa ngữ cảnh yêu cầu thực tế với '[byte string] '. decode (' [charset] ') và u' [unicode string] '. encode (' utf-8 '). Bạn đang tham chiếu đến các tham số yêu cầu mã hóa. –
liên quan: [Một cách hay để lấy bảng mã/mã hóa phản hồi HTTP bằng Python] (http://stackoverflow.com/q/14592762/4279) – jfs