1

我在传递带有 unicode 字符的 uri 以rdflib添加到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 ”的形式传递,那很好,如果字符串采用这种方式,解析器就可以工作(对不起,我不知道该调用什么事物,无论是“原始”、“转义”、“未转义”还是其他)。

有什么我可以做的uri(它不是以这种方式设置的,它是通过一个循环遍历名称列表的函数来设置的),这样print uri可以http://dbpedia.org/resource/Ren%C3%A9_Auberjonois吗?

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

此外,如果有很好的资源来理解我在这里遇到的问题,那会很酷。我现在对字符编码感到困惑。

4

1 回答 1

2

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

>>> 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参数指定不应被引用的字符。它默认为/.

于 2014-04-28T02:36:44.610 回答