Python декодировать UTF - PullRequest
       32

Python декодировать UTF

0 голосов
/ 20 декабря 2018

с пердением мозга.Но как мне декодировать строку, которая содержит.

t = '%2Fdata%2F'
print(t.decode('utf8'))
'str' object has no attribute 'decode'

, ожидая /data/

1 Ответ

0 голосов
/ 20 декабря 2018

2F - шестнадцатеричное число символа /.Python имеет функцию chr, которая возвращает представление символа в виде десятичного числа .

Таким образом, вам нужно получить два символа после % s и «декодирования»("hex" -> chr(int("hex",16))) их в символ.

def decode_utf(string):
    for i in range(string.count("%")):
        tmp_index = string.index("%")
        hex_chr = string[tmp_index:tmp_index + 3]
        #replace only one characher at a time
        string = string.replace(hex_chr, chr(int(hex_chr[1:],16)),1)
    return string

print(decode_utf("%2Fdata%2F"))
#/data/
print(decode_utf("hello%20world%21"))
#hello world!

Редактировать 1:

Предыдущий код прерывается, если есть символ %25, используйте код ниже.

def decode_utf(string):
    utf_characters = []
    tmp_index = 0

    for i in range(string.count("%")):
        tmp_index = string.index("%",tmp_index)
        hex_chr = string[tmp_index:tmp_index + 3]
        if not hex_chr in utf_characters:
            utf_characters.append(hex_chr)

        tmp_index += 1

    for hex_chr in utf_characters:
        string = string.replace(hex_chr, chr(int(hex_chr[1:],16)))

    return string

print(decode_utf("%25t%20e%21s%2ft%25"))
#%t e!s/t%
...