为什么我不能将 unicode 字符串转换为纯 python 字符串?

问题描述

url = u'/wiki/Category:%E6%89%93%E7%A3%9A%E5%A1%8A'

解码后的字符串是(通过https://www.urldecoder.org/):

decoded_url = u'/wiki/Category:打磚塊'

在python中,我有以下代码来做这个转换:

decoded_url = url.decode('utf-8')

这段代码根本没有改变它。我也试过:

decoded_url = url.encode('utf-8')

字符串保持不变。如何将其转换为我想要的解码后的字符串?

解决方法

以下是 Python 2.7 代码,可根据问题中的原始字符串为您提供所需的结果:

import urlparse

utfStr = u"/wiki/Category:%E6%89%93%E7%A3%9A%E5%A1%8A"
asciiStr = utfStr.encode()
str = urlparse.unquote(asciiStr)
print(str)

结果:

/wiki/Category:打磚塊

当给定一个 unicode 字符串时,unquote 似乎做错了事情。您必须先将其转换为单字节字符串,然后 unquote 才能执行正确的操作。

,

不是db.flightStats.aggregate([ { $group: { _id: { $week: "$flight_date" } },$group: { _id: { delay_in_minutes: "$delay_in_minutes" },total_delay: { $sum: 1 },avgDelay: { $avg: "$delay_in_minutes" } } },{ $sort: { avgDelay: -1 } } ]).pretty() 而是UTF-8 encodingurl quoting

url escaping

结果

import urllib.parse

print( urllib.parse.unquote( u'/wiki/Category:%E6%89%93%E7%A3%9A%E5%A1%8A') )

Python 3.x 文档:urllib.parse


编辑:

/wiki/Category:打磚塊 在模块 Python 2.7

中有它
urlparse

Python 2.7 文档:urlparse


编辑:

在使用 import urlparse print( urlparse.unquote(u'/wiki/Category:%E6%89%93%E7%A3%9A%E5%A1%8A') ) 进行测试后,需要在 Python 2.7 之前使用 encode() 才能使用 unquote()(纯文本)而不是 str

unicode

结果

#-*- coding:  utf-8 -*-
import urlparse
 
url = u'/wiki/Category:%e6%89%93%E7%A3%9A%E5%A1%8A'
url = url.encode('utf-8')    # convert `unicode` to `str`
url = urlparse.unquote(url)  # convert `%e6%89%93%E7%A3%9A%E5%A1%8A` to `打磚塊`

print url
print type(url)
print '打磚塊' in url

顺便说一句: /wiki/Category:打磚塊 <type 'str'> True 也一样 - 它不需要 Python 3

encode()

结果:

import urllib.parse
 
url = u'/wiki/Category:%e6%89%93%E7%A3%9A%E5%A1%8A'
url = urllib.parse.unquote(url)  # convert `%e6%89%93%E7%A3%9A%E5%A1%8A` to `打磚塊`

print(url)
print(type(url))
print('打磚塊' in url)