是否可以在Python中将“é”打印为“%C3%A9”?

2024-09-28 17:00:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在向rdflib传递带有unicode字符的uri时遇到问题,以便添加到Graph()

例如,我想运行:

from rdflib import Graph
g = Graph()
uri = 'http://dbpedia.org/resource/René_Auberjonois'
g.parse(uri)

但是我得到了一个在Python中很常见的ascii编解码器编码错误。在

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 17: ordinal not in range(128)

如果uri被传递为`http://dbpedia.org/resource/Ren%C3%A9_Auberjonois',那就没问题了,如果字符串是那样的话,解析器就可以工作了(对不起,我不知道该怎么称呼它,不管它是“raw”、“escaped”、“unescaped”还是其他)。在

我能做些什么来uri(它不是以这种方式设置的,而是通过一个在名称列表上循环的函数来设置的),这样print uri会给出{}?在

背景: 我最初问了this问题,但是在字符串前面添加u对于如何设置脚本来说是不可行的(我没有像:s = 'René_Auberjonois'那样设置每个字符串),或者当我将它传递给rdflib时,它实际上不起作用(即仍然得到编码错误,因为它正在被传递http://dbpedia.org/resource/René_Auberjonois

另外,如果有很好的资源来理解我在这里遇到的问题,那将是很酷的。我现在被字符编码搞糊涂了。在


Tags: 字符串inorghttp编码错误asciiuri
1条回答
网友
1楼 · 发布于 2024-09-28 17:00:21

如果百分比编码形式是您需要的,那么您可以使用^{}

>>> import urllib
>>> s='http://dbpedia.org/René_Auberjonois'
>>> urllib.quote(s)
'http%3A//dbpedia.org/Ren%C3%A9_Auberjonois'
>>> urllib.quote(s, safe=':')
'http:%2F%2Fdbpedia.org%2FRen%C3%A9_Auberjonois'
>>> urllib.quote(s, safe=':/')
'http://dbpedia.org/Ren%C3%A9_Auberjonois'
>>> 

使用safe参数指定不应加引号的字符。它默认为/。在

相关问题 更多 >