как кодировать URL в Python - PullRequest
0 голосов
/ 30 июня 2011

Я создал функцию для декодирования URL.

from urllib import unquote

def unquote_u(source):
  result = source
  if '%u' in result:
    result = result.replace('%u','\\u').decode('unicode_escape')
  result = unquote(result)
  print result
  return result

if __name__=='__main__':
    unquote_u('{%22%22%3A%22test_%E5%93%A6%E4%BA%88%E4%BB%A5%E8%85%BF%E5%93%A6.doc.txt%22%2C%22mimeType%22%3A%22text%2Fplain%22%2C%22compressed%22%3Afalse%7D')

Но я не эль, чтобы получить правильное имя файла. правильное имя файла: test_ 哦 予以 腿 哦 .doc

Может кто-нибудь сказать мне, как это сделать?

Ответы [ 2 ]

5 голосов
/ 30 июня 2011

urllib.unquote может сделать это:

>>> urllib.unquote('{%22%22%3A%22test_%E5%93%A6%E4%BA%88%E4%BB%A5%E8%85%BF%E5%93%A6.doc.txt%22%2C%22mimeType%22%3A%22text%2Fplain%22%2C%22compressed%22%3AFalse%7D')
'{"":"test_\xe5\x93\xa6\xe4\xba\x88\xe4\xbb\xa5\xe8\x85\xbf\xe5\x93\xa6.doc.txt","mimeType":"text/plain","compressed":False}'
>>> eval(_)
{'': 'test_\xe5\x93\xa6\xe4\xba\x88\xe4\xbb\xa5\xe8\x85\xbf\xe5\x93\xa6.doc.txt', 'mimeType': 'text/plain', 'compressed': False}
>>> _['']
'test_\xe5\x93\xa6\xe4\xba\x88\xe4\xbb\xa5\xe8\x85\xbf\xe5\x93\xa6.doc.txt'
>>> print _
test_哦予以腿哦.doc.txt

Обратите внимание, что мне пришлось изменить "ложь" на "Ложь" в строке в кавычках.Также, что строка после кавычки все еще в кодировке UTF-8;Вы можете использовать str.decode ('utf8'), чтобы получить строку Unicode, если это то, что вам нужно.

Как упоминает Дж. Бернардо, eval () небезопасных данных - очень плохая идея.Любой, кто знает или даже подозревает, что серверный сценарий является eval () - данные формы могут легко создать POST с помощью команд, которые могут скомпрометировать сервер.Лучше было бы так:

>>> import json, urllib
>>> json.loads(urllib.unquote('{%22%22%3A%22test_%E5%93%A6%E4%BA%88%E4%BB%A5%E8%85%BF%E5%93%A6.doc.txt%22%2C%22mimeType%22%3A%22text%2Fplain%22%2C%22compressed%22%3Afalse%7D'))['']
u'test_\u54e6\u4e88\u4ee5\u817f\u54e6.doc.txt'
>>> print _
test_哦予以腿哦.doc.txt

Также обратите внимание, что этот более поздний подход не требует замены false на False;на самом деле это не сработает, если я сделаю.Об этом заботится пакет json.

1 голос
/ 30 июня 2011

Одна вещь, которую нужно добавить, после получения URL без кавычек из urllib.unquote (url) вам, вероятно, потребуется использовать decode ('utf8'), чтобы преобразовать необработанную строку в строку Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...