2013-10-29 24 views
8

Python3 thay đổi hành vi unicode để từ chối cặp thay thế trong khi python2 không.Làm thế nào để thực hiện thay thế trong python2

Có một câu hỏi here

Nhưng nó không cung cấp một giải pháp làm thế nào để loại bỏ cặp thay thế trong python2 hoặc làm thế nào để làm đại diện thoát.

Python3 dụ:

>>> a = b'\xed\xa0\xbd\xe4\xbd\xa0\xe5\xa5\xbd' 
>>> a.decode('utf-8', 'surrogateescape') 
'\udced\udca0\udcbd你好' 
>>> a.decode('utf-8', 'ignore') 
'你好' 

Các '\ cố định \ xa0 \ xbd' ở đây không phải là thích hợp utf-8 ký tự. Và tôi muốn bỏ qua chúng hoặc trốn thoát chúng.

Có thể thực hiện điều tương tự trong python2 không?

+0

Chính xác bạn muốn làm gì? Nó không rõ ràng. Cung cấp một ví dụ. –

+0

@MarkTolonen Tôi đã thêm một ví dụ. – lxyu

+0

Tôi không thấy cách nào tốt hơn so với xử lý sau đối tượng unicode đã giải mã để xóa tất cả ký tự giữa '\ udc00' và '\ udfff'. –

Trả lời

5

Không có giải pháp dựng sẵn, nhưng có một thực hiện surrogateescapes trong python-tương lai: https://github.com/PythonCharmers/python-future

Thêm from future.utils.surrogateescape import register_surrogateescape với hàng nhập khẩu. Sau đó, gọi phương thức register_surrogateescape() và sau đó bạn có thể sử dụng trình xử lý lỗi errors='surrogateescape' trong encodedecode.

Ví dụ có thể được tìm thấy here

Các vấn đề liên quan