2009-04-23 10 views
15

Tôi đã nhận được một chuỗi từ tiêu đề HTTP, nhưng nó đã được thoát. Tôi có thể sử dụng chức năng nào để hủy cảnh báo?Unescape Python Strings Từ HTTP

myemail%40gmail.com -> [email protected] 

Urllib.unquote() có phải là cách để đi không?

Trả lời

34

Tôi khá chắc chắn rằng urllib's unquote là cách phổ biến để thực hiện việc này.

>>> import urllib 
>>> urllib.unquote("myemail%40gmail.com") 
'[email protected]' 

Ngoài ra còn có unquote_plus:

Giống như unquote(), mà còn thay thế cộng với dấu hiệu bằng dấu cách, theo yêu cầu cho unquoting giá trị dạng HTML.

+1

K, chỉ muốn chắc chắn .. Tôi ghét sử dụng một chức năng xuất hiện để thực hiện công việc, nhưng cuối cùng chỉ làm việc với một vài ví dụ mà tôi đã làm và phá vỡ với các vars thế giới thực. heh. Sau đó, nó sẽ trở thành không thể theo dõi vấn đề ..: P – Ian

1

Trong Python 3, các chức năng này là urllib.parse.unquoteurllib.parse.unquote_plus.

Sau đó được sử dụng ví dụ cho các chuỗi truy vấn trong URL HTTP, nơi các nhân vật không gian () đều được truyền thống mã hóa như cộng ký tự (+), và + là trăm mã hóa để %2B. Ngoài ra, còn có unquote_to_bytes chuyển đổi chuỗi được mã hóa đã cho thành bytes, có thể được sử dụng khi mã hóa không được biết hoặc dữ liệu được mã hóa là dữ liệu nhị phân. Tuy nhiên không có unquote_plus_to_bytes, nếu bạn cần đến nó, bạn có thể làm:

def unquote_plus_to_bytes(s): 
    if isinstance(s, bytes): 
     s = s.replace(b'+', b' ') 
    else: 
     s = s.replace('+', ' ') 
    return unquote_to_bytes(s) 

biết thêm thông tin về việc có nên sử dụng unquote hoặc unquote_plus có sẵn tại URL encoding the space character: + or %20.