繁体   English   中英

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

[英]Why can't I convert unicode string to plain python string?

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才会做正确的事情。

它不是UTF-8 encoding ,而是url escapingZ572D4E421E5E6B9BC111D815E80

import urllib.parse

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

结果

/wiki/Category:打磚塊

Python 3.x 文档: urllib.parse


编辑:

Python 2.7在模块urlparse中有它

 import urlparse

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

Python 2.7 文档: urlparse


编辑:

在使用Python 2.7进行测试后,它需要在unquote() encode()才能使用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)

结果:

/wiki/Category:打磚塊
<class 'str'>
True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM